调用
image = Image.open(data)
image.thumbnail((36,36), Image.NEAREST)
将保持宽高比。但我需要最终显示这样的图像:
<img src="/media/image.png" style="height:36px; width:36px" />
我可以在图片周围使用透明或白色的信箱样式吗?
答案 0 :(得分:154)
PIL已经具备了这样做的功能:
from PIL import Image, ImageOps
thumb = ImageOps.fit(image, size, Image.ANTIALIAS)
答案 1 :(得分:72)
将图像粘贴到具有正确尺寸作为背景的透明图像
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")
编辑:修复语法错误
答案 2 :(得分: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()
答案 3 :(得分:1)
或者这个,也许......(原谅意大利面条)
from PIL import Image
def process_image(image, size):
if image.size[0] > size[0] or image.size[1] > size[1]:
#preserve original
thumb = image.copy()
thumb.thumbnail(size,Image.ANTIALIAS)
img = thumb.copy()
img_padded = Image.new("RGBA",size)
img_padded.paste(image,(int((size[0]-image.size[0])/2),int((size[1]-image.size[1])/2)))
return img_padded
答案 4 :(得分:1)
这将以image.jpg
的形式创建image_thumb.jpg
的缩略图:
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")
答案 5 :(得分:0)
您可以在此功能中包裹Nadia的答案,以便您控制大小和背景。
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
答案 6 :(得分:0)
为什么不简单地使用resize方法?
from PIL import Image
image = Image.open('/path/to/img.png')
image = image.resize((36,36), Image.ANTIALIAS)
请参阅此发行说明中有关调整图像大小的建议: https://pillow.readthedocs.io/en/stable/releasenotes/5.3.0.html