【发布时间】:2011-01-15 00:29:52
【问题描述】:
无论如何,PIL 是否会调整到我给它的确切尺寸?或者如果我给它Image.ANTIALIAS 参数,它会尝试保持纵横比吗?
【问题讨论】:
-
对不起,我编辑了我的问题,因为它很不清楚。
标签: python resize python-imaging-library
无论如何,PIL 是否会调整到我给它的确切尺寸?或者如果我给它Image.ANTIALIAS 参数,它会尝试保持纵横比吗?
【问题讨论】:
标签: python resize python-imaging-library
How do I resize an image using PIL and maintain its aspect ratio?
来自 PIL 的 Image.resize 将完全按照说明进行。没有幕后长宽比的东西。
【讨论】:
是的,它将使用 thumbnail 方法保持纵横比:
image = Image.open(source_path)
image.thumbnail(size, Image.ANTIALIAS)
image.save(dest_path, "JPEG")
【讨论】:
是的。 thumbnail() 方法是这里需要的......在这个或关于该主题的其他帖子中没有提到的一件事是“大小”必须是一个列表或元组。因此,要将最大尺寸调整为 500 像素,您可以调用: image.thumbnail((500,500), Image.ANTIALIAS)
另请参阅有关该主题的帖子: How do I resize an image using PIL and maintain its aspect ratio?
【讨论】:
不,它没有。但是您可以执行以下操作:
im = PIL.Image.open("email.jpg"))
width, height = im.size
im = im.resize((width//2, height//2))
这里高度和宽度除以相同的数字,保持相同的纵横比。
【讨论】:
im = im.resize((width//2, height//2))
好的,所以这需要几行代码才能得到你想要的。
首先找到比率,然后确定所需图像的尺寸(高度或宽度)。在我的例子中,我希望高度为 100px,并让宽度相应地调整,最后使用该比率来找到新的高度或新的宽度。
所以先找到尺寸:
width, height = logo_img.size
ratio = width / height
然后,修复其中一个维度:
new_height = 100
然后找到该高度的新宽度:
new_width = int(ratio * new_height)
logo_img = logo_img.resize((new_width, new_height))
【讨论】:
最近的 Pillow 版本(自 8.3 起)具有以下方法来调整图像大小以适应给定的框并保持纵横比。
image = ImageOps.contain(image, (2048,2048))
【讨论】:
ImageOps.fit(image, size) 也可能会有所帮助。
我认为以下是最简单的方法:
Img1 = img.resize((img.size),PIL.Image.ANTIALIAS)
【讨论】:
这取决于你的需求,如果你愿意,你可以设置一个固定的高度和宽度,或者如果你愿意,你可以用 aspect-ratio 调整它的大小。
对于纵横比调整大小,您可以尝试使用以下代码:
使新图像的宽度和高度分别为原图像的一半:
from PIL import Image
im = Image.open("image.jpg")
resized_im = im.resize((round(im.size[0]*0.5), round(im.size[1]*0.5)))
#Save the cropped image
resized_im.save('resizedimage.jpg')
使用固定宽度和比例动态高度调整大小:
from PIL import Image
new_width = 300
im = Image.open("img/7.jpeg")
concat = int(new_width/float(im.size[0]))
size = int((float(im.size[1])*float(concat)))
resized_im = im.resize((new_width,size), Image.ANTIALIAS)
#Save the cropped image
resized_im.save('resizedimage.jpg')
【讨论】: