Python PIL缩略图使用Image.ANTIALIAS。如何保持质量?

6

我正在尝试在保持长宽比的情况下调整图像大小。我使用PIL的缩略图方法来完成这个任务,同时使用Image.ANTIALIAS过滤器。

你可以在这里查看我的代码:

image = Image.open(design.design.path)
format = image.format
image = ImageOps.mirror(image)
new_size = (241, 241)
image.thumbnail(new_size, Image.ANTIALIAS)
image.save(response, format)

这段代码在生成缩略图后,图片质量有所损失。通过放大保存的图像,我可以看到图像角落处的像素,而在原始图像上则没有这种情况。当我打印调整大小后的图像时,这种情况更加明显。你可以在这里查看样本图像:http://imgur.com/a/ifZoU。如果需要其他信息,请告诉我。

你是要把图片变小还是变大?无论如何,我建议使用“resize”方法而不是“thumbnail”方法。 - James Kent
@JamesKent 我正在将它们变小。我使用缩略图而不是调整大小来保持纵横比。调整大小无法保持纵横比。 - Marijus
为什么 resize 不会保留宽高比?因为你在这里硬编码了宽高比为1:1,如果使用 resize 也将是该宽高比。 - physicalattraction
@physicalattraction 在这种情况下是的,但这只是演示代码,在实际应用中我想要调整大小的几个不是正方形的尺寸。 - Marijus
thumbnail 方法重新计算给定的大小以保持纵横比,然后调用 resize - ekhumoro
显示剩余2条评论
2个回答

3

Image.save有一些选项可供您选择:

img.save(fpath, 'image/png', quality=100, optimize=True) 

我尝试了质量和优化选项,但它们都没有起到帮助作用。 - Marijus
我想这个问题与调整大小和失去质量有关,而不是压缩问题。 - Farshid Ashouri

2
如果您正在制作像素图像的缩略图,当然会失去品质。重新调整此类图像(与矢量图像相反)只是丢弃信息 - 没有办法恢复它。
如果您需要查看全尺寸图像,则必须保留原始图像,并仅在需要时显示缩小版本 - 对于其他所有内容,请使用原始图像。

https://en.wikipedia.org/wiki/Raster_graphics


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接