【问题标题】:Image resize - bad quality图像调整大小 - 质量差
【发布时间】:2021-02-15 02:02:46
【问题描述】:

我想将图像从 239x210 缩放到 22x19,我正在使用 Thumbnailator:

public BufferedImage process(BufferedImage bufferedImage, CanvasData canvasData) {
    int imageSize = (canvasData.getDensity() * canvasData.getSize()) / 10;

    try {
        bufferedImage = Thumbnails.of(bufferedImage)
                .imageType(BufferedImage.TYPE_INT_RGB)
                .size(imageSize, imageSize)
                .outputQuality(1)
                .asBufferedImage();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return bufferedImage;
}

Gimp ||| Original ||| Thumnailator

我想获得与 gimp 相同的输出,但我不知道如何才能达到。

【问题讨论】:

  • 使用像 png 这样的无损压缩来消除一种类型的问题(工件)。
  • @JoopEggen 但如何?
  • ImageIO.write

标签: java image scaling image-resizing


【解决方案1】:

正如 Joop 在 cmets 中提到的,图像质量差的主要原因是因为与 GIMP 的输出相比,compression artifacts 很多。

这是因为您使用的是控制输出压缩率的outputQuality 方法,但不是将缩略图写入文件,而是通过asBufferedImage 方法写入BufferedImage

如果您仔细查看outputQuality method 的文档,您会发现它提到此方法不会对最终图像产生任何影响。

所以,你有两个选择:

  1. 使用写入FileOutputStream 的Thumbnailator 输出方法之一,以便您获得JPEG 流,这符合您的outputQuality(1.0) 设置。 toFileasFiletoOutputStreamasOutputStream 方法将是您选择此选项的门票。

  2. 如果您必须输出到 BufferedImage,那么您需要配置任何内容,如果实际编写 BufferedImage 以编写具有较低压缩比的 JPEG - 这发生在代码 sn-p 您之外提供。

我推荐选项 1,因为您似乎在向 Thumbnailator 传达您想要压缩最小的 JPEG 的意图,因此让 Thumbnailator 将 JPEG 写入文件或流是有意义的。


免责声明:我是Thumbnailator 库的维护者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-22
    • 2012-12-05
    • 2012-11-30
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    相关资源
    最近更新 更多