PIL:缩略图生成正方形图像

57 投票
7 回答
36965 浏览
提问于 2025-04-15 14:07

调用

image = Image.open(data)
image.thumbnail((36,36), Image.NEAREST)

会保持图像的宽高比。但是我想要的效果是这样的:

<img src="/media/image.png" style="height:36px; width:36px" />

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

7 个回答

2

在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在另一个地方使用这些数据。这个过程就像是把水从一个水桶倒到另一个水桶里。我们需要确保水不会洒出来,也就是在这个过程中要保持数据的完整性。

有些时候,我们可能会遇到一些问题,比如数据格式不对,或者数据丢失了。这就像是水桶有个洞,水会漏掉。为了避免这些问题,我们需要使用一些工具和方法来检查和修复数据。

总之,处理数据就像是管理水流,我们需要小心翼翼,确保一切顺利进行。

from PIL import Image

import StringIO

def thumbnail_image():
    image = Image.open("image.png")
    image.thumbnail((300, 200))
    thumb_buffer = StringIO.StringIO()
    image.save(thumb_buffer, format=image.format)
    fp = open("thumbnail.png", "w")
    fp.write(thumb_buffer.getvalue())
    fp.close()
168

PIL已经有一个功能可以完全做到这一点:

from PIL import Image, ImageOps
thumb = ImageOps.fit(image, size, Image.LANCZOS)
83

把图片粘贴到一个透明的、大小合适的背景图上

from PIL import Image
size = (36, 36)
image = Image.open(data)
image.thumbnail(size, Image.LANCZOS)
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")

编辑:修正了语法错误

撰写回答