1

我使用以下代码调整图像大小,但问题是它们不保持原始纵横比,有什么方法可以在不影响纵横比的情况下调整图像大小。

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));
4

2 回答 2

3

您可能想阅读以下文档getScaledInstance()

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

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

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

(强调我的)

于 2013-05-14T15:06:54.180 回答
0

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

还有一个 java 库可用于调用 imagemaick 它称为JMagick

于 2013-05-14T15:09:56.543 回答