目前,对于以下功能,...图像将根据最长的一面进行调整。
基本上,图片具有更高的高度,该高度将为200px。宽度只要...不管...
如果图像的宽度较大,则宽度将为200px,高度将相应调整。
我该如何翻转!!我希望此功能考虑最短的方面。
我写错了这个功能吗?
def create_thumbnail(f, width=200, height=None, pad = False):
#resizes the longest side!!! doesn't even care about the shortest side
#this function maintains aspect ratio.
if height==None: height=width
im = Image.open(StringIO(f))
imagex = int(im.size[0])
imagey = int(im.size[1])
if imagex < width or imagey < height:
pass
#return None
if im.mode not in ('L', 'RGB', 'RGBA'):
im = im.convert('RGB')
im.thumbnail((width, height), Image.ANTIALIAS)
thumbnail_file = StringIO()
im.save(thumbnail_file, 'JPEG')
thumbnail_file.seek(0)
return thumbnail_file
最佳答案
使用resize
代替thumbnail
。thumbnail
的要点是使其易于按比例缩小图像以适合特定的边框保留宽高比。这意味着,如果您的边界框是正方形,则图像的较长边将确定所使用的比例。resize
使您可以更直接地控制-您可以精确指定所需的大小。
实际上,由于您要保留长宽比,您仍然可以使用缩略图,但是您需要对边界框进行修饰。在呼叫thumbnail
之前,请尝试执行以下操作:
old_aspect = float(imagex)/float(imagey)
new_aspect = float(width)/float(height)
if old_aspect < new_aspect:
height = int(width / old_aspect)
else:
width = int(height * old_aspect)
关于python - 创建缩略图时,如何使PIL考虑到最短的一面?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4321290/