使用Java库imgsclr进行RESIZE的图像质量问题

时间:2015-02-23 20:03:54

标签: java image java-2d imgscalr

当我尝试使用imgsclr 4.2(http://www.thebuzzmedia.com/imgscalr-3-2-released/comment-page-1/#comment-650387)将图像调整为特定的宽度和高度时,我的质量有问题。

我有一张240X320的图像,我必须将其调整为50X75和120X180。我使用以下代码分别尝试了两种(我使用的是imgscalr 4.2)。

image=resize(image,Method.ULTRA_QUALITY, 50,75, OP_ANTIALIAS, OP_BRIGHTER);
saveImage(image, ImageFormatTypes.JPEG, DESTINATION + RESIZED_IMAGE + “.”+ImageFormatTypes.JPEG);

我有两个问题。与用于手动调整图像大小的其他内部工具相比,#1的质量非常低。 #2。输出的宽度从50增加到56,从120增加到135,这很奇怪。

你知道为什么会这样吗?我感谢您的帮助。 Original Image Resized Image

1 个答案:

答案 0 :(得分:3)

我认为核心问题不在于imgsclr,而在于jpg的选择。请记住,jpg使用基于丢失的算法,倾倒部分图像以减小其大小。

为了进行比较,下面的两张图片是使用相同的方法生成的,但左边是jpg输出,右边是png(使用ImageIO API)

Compare

因此顶部图像是相同的主图像。

第二行是使用ULTRA_QUALITYAUTOMATICBALANCEDQUALITY方法的imgsclr。第二行的最后一张图片使用SPEED

最后一行是"其他"缩放方法。前两个使用分而治之的方法,将图像除以2直到达到它所需的大小,显示here。第一个是填充"另一个是#34;以适应" (一个将填满可用空间,一个将适合其中)。第三张图片正在使用Image#getScaledInstance,我似乎在某处引入了alpha通道,因此jpg版本为红色,但我在比较质量;)

尺寸增加的原因可能归结为imgsclr试图保持图像的纵横比

最后......

enter image description here

比较BufferedImageOp,使用OP_BRIGHTEROP_ANTIALIASOP_BRIGHTEROP_ANTIALIAS,从右到左比较没有...

这些输出为PNG