PIL:缩略图,最后是方形图像

Pau*_*jan 54 python png alpha thumbnails python-imaging-library

调用

image = Image.open(data)
image.thumbnail((36,36), Image.NEAREST)
Run Code Online (Sandbox Code Playgroud)

将保持纵横比.但我需要最终显示这样的图像:

<img src="/media/image.png" style="height:36px; width:36px" />
Run Code Online (Sandbox Code Playgroud)

我可以在图像周围使用透明或白色的信箱样式吗?

Ces*_*ssa 162

PIL已经具有完全相同的功能:

from PIL import Image, ImageOps
thumb = ImageOps.fit(image, size, Image.ANTIALIAS)
Run Code Online (Sandbox Code Playgroud)

  • +1,应该是已接受的答案 (17认同)
  • 为什么这么多人投票?这根本不回答这个问题. (9认同)
  • 使用此方法***生成具有透明填充的方形图像. (8认同)
  • 它得到了很多赞成,因为这个问题在Google搜索"python pil resize and crop"时出现了很高的问题,这是一个优雅的解决方案,尽管它与OP无关. (5认同)
  • 这种方法以某种方式裁剪我的图像以适应分辨率. (3认同)

Nad*_*mli 75

将图像粘贴到具有正确尺寸作为背景的透明图像中

from PIL import Image
size = (36, 36)
image = Image.open(data)
image.thumbnail(size, Image.ANTIALIAS)
background = Image.new('RGBA', size, (255, 255, 255, 0))
background.paste(
    image, (int((size[0] - image.size[0]) / 2), int((size[1] - image.size[1]) / 2))
)
background.save("output.png")
Run Code Online (Sandbox Code Playgroud)

编辑:修复语法错误

  • 更新:使用`Image.ANTIALIAS`而不是`Image.NEAREST`来获得更高质量和压缩的图像. (6认同)
  • **注意**:一定要使用`background.save()` 和*不* `image.save()` (2认同)
  • 对于Python 3,将"/"替换为"//" (2认同)