当我尝试使用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,这很奇怪。
你知道为什么会这样吗?我感谢您的帮助。
答案 0 :(得分:3)
我认为核心问题不在于imgsclr,而在于jpg
的选择。请记住,jpg使用基于丢失的算法,倾倒部分图像以减小其大小。
为了进行比较,下面的两张图片是使用相同的方法生成的,但左边是jpg
输出,右边是png
(使用ImageIO
API)
因此顶部图像是相同的主图像。
第二行是使用ULTRA_QUALITY
,AUTOMATIC
,BALANCED
和QUALITY
方法的imgsclr。第二行的最后一张图片使用SPEED
最后一行是"其他"缩放方法。前两个使用分而治之的方法,将图像除以2直到达到它所需的大小,显示here。第一个是填充"另一个是#34;以适应" (一个将填满可用空间,一个将适合其中)。第三张图片正在使用Image#getScaledInstance
,我似乎在某处引入了alpha通道,因此jpg版本为红色,但我在比较质量;)
尺寸增加的原因可能归结为imgsclr试图保持图像的纵横比
最后......
比较BufferedImageOp
,使用OP_BRIGHTER
,OP_ANTIALIAS
和OP_BRIGHTER
,OP_ANTIALIAS
,从右到左比较没有...
这些输出为PNG