2017-01-18 13 views
-1

私は画像が表示され、最大の高さは375、最大の幅は775のフィールドを持っています。アスペクト比を維持しながら最大のサイズを得るために、これらの値の1つにできるだけ近い値にします私が思いついたのは実際にはうまくいくようですが、私が考えていないよりよい方法があると思います。アスペクト比を維持しながら画像を縮小する最も効率的な方法は?

InputStream in = new ByteArrayInputStream(fileData); 
    BufferedImage buf = ImageIO.read(in); 

    int maxWidth = 775; 
    int maxHeight = 375; 
    int newWidth; 
    int newHeight; 
    float height = buf.getHeight(); 
    float width = buf.getWidth(); 
    float ratio = (float) 0.0; 

    if(height > maxHeight || width > maxWidth) 
    { 

    if (height > width) 
    { 
     ratio = (height/width); 
    } 
    else if(width > height) 
     ratio = (width/height); 
    while(height > maxHeight || width > maxWidth) 
    { 
     if (height > width) 
     {    
      height -= ratio; 
      width -= 1; 
     } 

     else if(width > height) 
     { 
       width -= ratio; 
       height -= 1;          
     } 

    } 
    } 
    newWidth = (int) width; 
    newHeight = (int) height; 

    // Call method to scale image to appropriate size 
    byte[] newByte = scale(fileData, newWidth, newHeight); 
+0

が重複する可能性のようになります。http://stackoverflow.com/questions/273946/how-do-i-アスペクト比を使用してイメージを使用してサイズ変更しますか?rq = 1 –

答えて

2

2つのマックスのうち1つを使用することがわかります(画像がまだ拡大表示されていない場合)。

だから、それはどちらを決定するかの問題です。この画像のアスペクト比が最大面積比よりも大きい場合、幅が制限要因になるので、幅を最大に設定し、比率から高さを決定します。

同じプロセスは小さい比率のために適用することができる

コードは以下の

float maxRatio = maxWidth/maxHeight; 
if(maxRatio > ratio) { 
    width = maxWidth; 
    height = width/ratio; 
} else { 
    height = maxHeight; 
    width = height * ratio; 
} 
関連する問題