目前,对于以下功能,...图像将根据最长的一面进行调整。

基本上,图片具有更高的高度,该高度将为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/

10-15 20:54