我想在java中调整图像大小。
到现在为止我用这个:
BufferedImage resizedImage = new BufferedImage((int) new_dim.getWidth(), (int) new_dim.getHeight(), type);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, (int) new_dim.getWidth(), (int) new_dim.getHeight(), null);
g.dispose();
newDim是Dimension。
但结果质量很差......
是否有一些商业免费图书馆可以完成这项简单的工作?
答案 0 :(得分:8)
你应该试试imgscalr:
答案 1 :(得分:6)
Thumbnailator是一个开源(MIT许可证)库,专门用于图像大小调整操作,尤其是在缩小图像时。
例如,以下内容将调整BufferedImage
:
BufferedImage sourceImage = // ...
BufferedImage resizedImage =
Thumbnails.of(sourceImage)
.size(newWidth, newHeight)
.asBufferedImage();
Thumbnailator提供灵活的输入和输出,因此可以混合和匹配File
和BufferedImage
输入和输出:
BufferedImage sourceImage = // ...
Thumbnails.of(sourceImage)
.size(newWidth, newHeight)
.toFile(destinationFile);
或
File sourceFile = // ...
BufferedImage resizedImage =
Thumbnails.of(sourceFile)
.size(newWidth, newHeight)
.asBufferedImage();
图书馆使用技术来提高调整大小的图像的质量,并在保持速度和质量之间的良好平衡的同时进行。 Thumbnailator项目页面有image quality comparison。
免责声明:我是图书馆的维护者
答案 2 :(得分:1)
尝试说服您重新考虑,至少关于质量
您可以尝试使用g.setRenderingHints(KEY_INTERPOLATION, VALUE_INTERPOLATION_BICUBIC);
查看this。
还有ImageFilters,用于锐化等。