2012-04-01 77 views
3

如何调整图像大小并保持宽高比?调整图像大小 - 保持宽高比

这是我使用的方法:

private static BufferedImage resizeImage(BufferedImage originalImage, 
      int type) { 
     BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, 
       type); 
     Graphics2D g = resizedImage.createGraphics(); 
     g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null); 
     g.dispose(); 

     return resizedImage; 
    } 

type变量:

BufferedImage original = ImageIO.read(new File(imagePath)); 
int type = original.getType() == 0 ? BufferedImage.TYPE_INT_ARGB 
        : original.getType(); 

的问题是,一些图像被正确地调整大小,但其他失去因为IMG_WIDTH的它们的纵横比和IMG_HEIGHT。

有没有办法获得原始图像的尺寸,然后应用某种比例调整大小来保持调整大小的图像的纵横比?

回答

7

为什么不使用originalImage.getWidth()originalImage.getHeight()?然后,您可以轻松计算宽高比。不要忘记,INT/INT = INT,所以你需要做的

double ratio = 1.0 * originalImage.getWidth()/originalImage.getHeight(); 

or 

double ratio = (double) originalImage.getWidth()/originalImage.getHeight(); 

关于附加数学,就可以计算出

int height = (int) IMG_WIDTH/ratio; 

int width = (int) IMG_HEIGHT*ratio; 

然后看哪种更适合您的需求更好地调整大小,(IMG_WIDTH, height)(width, IMG_HEIGHT)

1

要获取图片尺寸,请参见getWidth()/getHeight()。其余的只是一些相对简单的数学。

。假定该IMG_WIDTH & IMG_HEIGHT代表所需的最大尺寸:

  • 发现这是会先打了极限。
  • 计算自然尺寸与最大尺寸之间的比率。
  • 将其他图像尺寸乘以相同的比例。
+0

我的问题是否有任何问题与图像#getScaledInstance – mKorbel 2012-04-01 12:20:54

+0

@mKorbel不知道它是否仍然适用,但看到[Image.getScaledInstance()的危害](http://today.java.net/pub/ A /今天/ 2007/04/03 /危险-的图像-getscaledinstance.html)。 – 2012-04-01 13:20:35

+0

谢谢你,这是一个答案+1 – mKorbel 2012-04-01 13:51:44

相关问题