如何使用 Python PIL 生成 1000x1000 的缩略图而不扭曲图像

How to I use Python PIL to produce a 1000x1000 thumbnail without distorting the image

我正在尝试导出 Python PIL 中图像的 1000x1000 缩略图而不扭曲原始图像。

如果原始图像的尺寸超过 1000x1000,则此代码有效。

(width, height) = img.size
left = int((width - 1000)/2)
right = left + 1000
new_img = img.crop((left, 0, right, height))
new_img = new_img.resize((1000,1000))

但是,如果图像的尺寸低于此尺寸(例如 800 x 400),它们就会被拉伸和扭曲。

根据我从你的问题中了解到的,无论图片大小,都需要将其裁剪为 1000x1000 图片。

一种方法是先将图像裁剪成正方形,然后将其调整为 1000x1000。

(width, height) = img.size
if width < height: # if width is smaller than height, crop height
    h = int((height - width)/2)
    new_img = img.crop((0, h, width, width+h))
else: # if height is smaller than width, crop width
    w = int((width - height)/2)
    new_img = img.crop((w, 0, height+w, height))
# resize to required size
new_img = new_img.resize((1000,1000))

先裁剪再放大比先放大再裁剪效率更高。这是因为在第二种情况下,您正在对较大的图像进行图像操作(即裁剪),这比裁剪较小的图像使用更多的资源(CPU、RAM 等)。如果您正在处理大量图像,这可能会导致处理时间出现显着差异。