图像调整大小 - 保持纵横比

时间:2012-04-01 10:40:52

标签: java resize bufferedimage

我如何调整图像大小并保持其纵横比?

这是我使用的方法:

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,某些图像被正确调整大小但其他图像的宽高比会丢失。

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

2 个答案:

答案 0 :(得分: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 :(得分:1)

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

假设IMG_WIDTH& IMG_HEIGHT代表所需的最大尺寸:

  • 首先找到哪个会达到极限。
  • 计算自然尺寸与最大尺寸之间的比率。
  • 将其他图像尺寸乘以相同的比例。