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

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而失去它们的长宽比。是否有一种方法可以获取原始图像尺寸,然后应用某种比例调整大小以保持调整大小后图像的长宽比?
2个回答

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_WIDTHIMG_HEIGHT表示所需的最大尺寸:

  • 找出哪一个会先达到限制。
  • 计算自然尺寸与最大尺寸之间的比率。
  • 将另一个图像维度乘以相同的比率。

我的问题是Image#getScaledInstance是否存在任何问题。 - mKorbel
@mKorbel 不确定是否仍然适用,但请参阅Image.getScaledInstance()的危险性 - Andrew Thompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接