在不影响宽高比的情况下调整图像大小

时间:2013-05-14 14:52:17

标签: java image resize bufferedimage java-2d

我使用以下代码来调整图像大小,但问题是它们不能保持原始的宽高比,有没有办法在不影响宽高比的情况下调整图像大小。

BufferedImage img1 = new BufferedImage(800, 600,
                    BufferedImage.TYPE_INT_RGB);
            img1.createGraphics()
                    .drawImage(
                            ImageIO.read(
                                    new File("/home/rvkydmpo/webapps/ROOT/images/profilePicture/"
                                            + fileName)).getScaledInstance(800,
                                    600, Image.SCALE_SMOOTH), 0, 0, null);
            ImageIO.write(img1, "jpg", new File("/home/rvkydmpo/webapps/ROOT/images/profilePicture/" +fileName));

2 个答案:

答案 0 :(得分:2)

您可能需要阅读the docs of getScaledInstance()

Image java.awt.Image.getScaledInstance(int width, int height, int hints)
     

创建此图像的缩放版本。返回一个新的Image对象   这将使图像处于指定的宽度和高度   默认。即使是,也可以异步加载新的Image对象   原始源图像已完全加载。

     

如果宽度或高度为负数,则值为   替换以保持原始图像的纵横比   尺寸。如果宽度和高度均为负值,则为原始值   使用图像尺寸。

(强调我的)

答案 1 :(得分:0)

我不知道您运行代码的服务器是什么,但如果您在基于Linux的系统上运行它,您可以使用imagemagick convert 命令。

还有一个可用于调用imagemaick的java库,名为JMagick