Python PIL:缩略图,并以方形图像结束

Python PIL:缩略图,并以方形图像结束,python,png,thumbnails,python-imaging-library,alpha,Python,Png,Thumbnails,Python Imaging Library,Alpha,召唤 将保持纵横比。但我需要这样显示图像: image = Image.open(data) image.thumbnail((36,36), Image.NEAREST) 我可以在图像周围使用透明或白色的信箱样式吗?将图像粘贴到具有适当大小作为背景的透明图像中 <img src="/media/image.png" style="height:36px; width:36px" /> 编辑:修复了语法错误PIL已经有了一个功能,可以准确地执行以下操作: from PIL i

召唤

将保持纵横比。但我需要这样显示图像:

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


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

将图像粘贴到具有适当大小作为背景的透明图像中

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

编辑:修复了语法错误

PIL已经有了一个功能,可以准确地执行以下操作:

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")
或者这个,也许。。。(原谅意大利面)


您可以将Nadia的答案包装在这个函数中,它可以让您控制大小和背景

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()
更新

这将创建
image.jpg
的缩略图作为
image\u thumb.jpg

def make_square(im, min_size=36, fill_color=(255, 255, 255, 0)):
    x, y = im.size
    size = min(min_size, x, y)
    new_im = Image.new('RGBA', (size, size), fill_color)
    im.thumbnail((256, 256))
    new_im.paste(im, (int((x - size) / 2), int((y -size) / 2))
    return new_im

为什么不简单地使用resize方法呢

from PIL import Image, ImageOps
fname = 'image.jpg'
size = (48,48)
thumb = ImageOps.fit(Image.open(fname), size, Image.ANTIALIAS)
thumb.save('{}_thumb.jpg'.format(fname[:fname.rfind('.')]), "JPEG")
请参阅本发行说明中有关图像大小调整的建议:

那是2年后的事……)这是对这个问题的一个很好的回答,旧的答案也很好,以防你想做一些类似的事情,但不完全相同。这种方法以某种方式裁剪我的图像以适应分辨率。使用这种方法不会生成带有透明填充的方形图像。为什么会有这么多的向上投票?这根本不能回答问题。它得到了很多支持票,因为这个问题在谷歌搜索
python-pil-resize and-crop
时出现得很高,这是一个优雅的解决方案,更新:使用
Image.antialas
而不是
Image.NEAREST
以获得更高质量和压缩的图像。注意:确保使用
background.save()
而不是
Image.save()
对于Python 3,将“/”替换为“/”
def make_square(im, min_size=36, fill_color=(255, 255, 255, 0)):
    x, y = im.size
    size = min(min_size, x, y)
    new_im = Image.new('RGBA', (size, size), fill_color)
    im.thumbnail((256, 256))
    new_im.paste(im, (int((x - size) / 2), int((y -size) / 2))
    return new_im
from PIL import Image, ImageOps
fname = 'image.jpg'
size = (48,48)
thumb = ImageOps.fit(Image.open(fname), size, Image.ANTIALIAS)
thumb.save('{}_thumb.jpg'.format(fname[:fname.rfind('.')]), "JPEG")
from PIL import Image
image = Image.open('/path/to/img.png')
image = image.resize((36,36), Image.ANTIALIAS)