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)