图像调整大小-质量差

时间:2020-11-02 11:55:53

标签: java image scaling image-resizing

我想将图像从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相同的输出,但是我不知道该如何实现。

1 个答案:

答案 0 :(得分:1)

正如乔普(Joop)在评论中提到的那样,图像质量较差的主要原因是因为与GIMP的输出相比,compression artifacts有很多。

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

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

因此,您有两个选择:

  1. 使用Thumbnailator的一种输出方法写入asBufferedImageFile,以便获得JPEG流,该格式遵循OutputStream设置。 outputQuality(1.0)toFileasFiletoOutputStream方法将是您使用此选项的方法。

  2. 如果必须输出到asOutputStream,则需要配置任何内容,如果实际写那个BufferedImage来以较低的压缩率写JPEG -这是在外部发生的您提供的代码段中的一个。

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


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