【问题标题】:Does Python PIL resize maintain the aspect ratio?Python PIL 调整大小是否保持纵横比?
【发布时间】:2011-01-15 00:29:52
【问题描述】:

无论如何,PIL 是否会调整到我给它的确切尺寸?或者如果我给它Image.ANTIALIAS 参数,它会尝试保持纵横比吗?

【问题讨论】:

  • 对不起,我编辑了我的问题,因为它很不清楚。

标签: python resize python-imaging-library


【解决方案1】:

How do I resize an image using PIL and maintain its aspect ratio?

来自 PIL 的 Image.resize 将完全按照说明进行。没有幕后长宽比的东西。

【讨论】:

  • 链接的答案使用 - im.thumbnail ,这是一般建议吗?或者只是在使用缩略图时
【解决方案2】:

是的,它将使用 thumbnail 方法保持纵横比:

image = Image.open(source_path)
image.thumbnail(size, Image.ANTIALIAS)
image.save(dest_path, "JPEG")

【讨论】:

  • ANTIALIAS 方法名称更新:从 2.7.0 开始,所有调整大小的方法都是 ANTIALIAS 并且特定 ANTIALIAS 过滤器的真实(新)名称是 LANCZOS。 (目前保留抗锯齿是为了向后兼容)pillow.readthedocs.io/en/3.0.x/releasenotes/…
  • 请注意,thumbnail 方法在其他方面并不等效——它不会将图像放大到比原来更大,并且它作用于图像对象并且不返回任何内容。
【解决方案3】:

是的。 thumbnail() 方法是这里需要的......在这个或关于该主题的其他帖子中没有提到的一件事是“大小”必须是一个列表或元组。因此,要将最大尺寸调整为 500 像素,您可以调用: image.thumbnail((500,500), Image.ANTIALIAS)

另请参阅有关该主题的帖子: How do I resize an image using PIL and maintain its aspect ratio?

【讨论】:

    【解决方案4】:

    不,它没有。但是您可以执行以下操作:

    im = PIL.Image.open("email.jpg"))
    width, height = im.size
    im = im.resize((width//2, height//2))
    

    这里高度和宽度除以相同的数字,保持相同的纵横比。

    【讨论】:

    • 您需要重新分配即时消息。 im.resize 不会修改原始图像。 im = im.resize((width//2, height//2))
    【解决方案5】:

    好的,所以这需要几行代码才能得到你想要的。

    首先找到比率,然后确定所需图像的尺寸(高度或宽度)。在我的例子中,我希望高度为 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))
    

    【讨论】:

      【解决方案6】:

      最近的 Pillow 版本(自 8.3 起)具有以下方法来调整图像大小以适应给定的框并保持纵横比。

      image = ImageOps.contain(image, (2048,2048))
      

      【讨论】:

      • 根据意图,ImageOps.fit(image, size) 也可能会有所帮助。
      【解决方案7】:

      我认为以下是最简单的方法:

      Img1 = img.resize((img.size),PIL.Image.ANTIALIAS)
      

      【讨论】:

        【解决方案8】:

        这取决于你的需求,如果你愿意,你可以设置一个固定的高度和宽度,或者如果你愿意,你可以用 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')
        

        【讨论】:

          猜你喜欢
          • 2020-06-14
          • 2013-06-26
          • 2012-04-15
          • 1970-01-01
          • 1970-01-01
          • 2021-08-06
          相关资源
          最近更新 更多