0

我正在使用以下代码调整图像大小,我可以getScaledInstance通过将一个参数设置为负数使用该功能轻松获得与原始图像相同的纵横比,以便它自动保持另一个参数以获得纵横比。但是我面临的问题是BufferedImage,我无法将其设置为所需的纵横比,因为我事先不知道它将生成什么高度值(宽度我已设置为 500)。我还包括了图像我可以通过运行以下代码得到结果。BufferedImage我已设置为 800x600,因为我别无选择。我之前的问题是在不影响纵横比的情况下调整图像大小

public class ResizeImage {
    public static void main(String[] args) throws IOException {
        BufferedImage img1 = new BufferedImage(800, 600,
                BufferedImage.TYPE_INT_RGB);
        img1.createGraphics()
                .drawImage(
                        ImageIO.read(
                                new File(
                                        "C:/Users/Public/Pictures/Sample Pictures/Desert.jpg"))
                                .getScaledInstance(500, -1, Image.SCALE_SMOOTH),
                        0, 0, null);
        ImageIO.write(img1, "jpg", new File(
                "C:/Users/Public/Pictures/Sample Pictures/test/Desert.jpg"));



    }
}

BufferedImage 创建额外的空白背景

4

1 回答 1

2

你可以做数学得到原始图像的纵横比

double ratio = img1.getWidth() / img1.getHeigth();

并以此比率调用 getScaledInstance

blabla.getScaledInstance(500, (int)500 / ratio, Image.SCALE_SMOOTH);
于 2013-05-14T16:53:17.727 回答