有什么办法可以在 reportlab 中插入一张圆形照片?
Any way to insert a round photo in reportlab?
此代码裁剪照片并保存。
from PIL import Image, ImageDraw
import os
def prepare_mask(size, antialias = 2):
mask = Image.new('L', (size[0] * antialias, size[1] * antialias), 0)
ImageDraw.Draw(mask).ellipse((0, 0) + mask.size, fill=255)
return mask.resize(size, Image.ANTIALIAS)
def crop(im, s):
w, h = im.size
k = w / s[0] - h / s[1]
if k > 0: im = im.crop(((w - h) / 2, 0, (w + h) / 2, h))
elif k < 0: im = im.crop((0, (h - w) / 2, w, (h + w) / 2))
return im.resize(s, Image.ANTIALIAS)
size = (200, 200)
def do_crop(img):
im = Image.open(img)
im = crop(im, size)
im.putalpha(prepare_mask(size, 4))
output = str(img).replace('jpg', 'png')
try:
os.remove(img)
except:
print(f"[INFO] Error deleting photo [{img}]")
else:
print(f'[INFO] Photo deleted successfully [{img}]')
try:
im.save(output)
print(f"[INFO] Photo saved successfully [{output}]")
except:
print(f"[INFO] Error saving photo [{output}]")
接下来,在另一个文件的代码中,我尝试以 PDF 格式查看这张照片。
self.can.drawImage(f'user_images\{self.user_id}user_photo.png', 300, 500, 200, 200)
#self.can - Canvas OBJECT
之后,不幸的是,当我在原始PDF文件中保存所有内容时,这张照片不是圆的,而是变成了方的,添加了边框,我该怎么办?
我正在为有类似问题的人写这篇文章,一切都很简单,插入一张圆形照片,它有一个“透明”背景,我不会完全解释它是如何工作的,但这是你需要做的让 reportlab 明白你想要什么。
以前的版本。
self.can.drawImage(f'user_images\{self.user_id}user_photo.png', 300, 500, 200, 200)
新版本
self.can.drawImage(f'user_images\{self.user_id}user_photo.png', 300, 500, 200, 200, mask='auto')
添加参数mask = 'auto'
此代码裁剪照片并保存。
from PIL import Image, ImageDraw
import os
def prepare_mask(size, antialias = 2):
mask = Image.new('L', (size[0] * antialias, size[1] * antialias), 0)
ImageDraw.Draw(mask).ellipse((0, 0) + mask.size, fill=255)
return mask.resize(size, Image.ANTIALIAS)
def crop(im, s):
w, h = im.size
k = w / s[0] - h / s[1]
if k > 0: im = im.crop(((w - h) / 2, 0, (w + h) / 2, h))
elif k < 0: im = im.crop((0, (h - w) / 2, w, (h + w) / 2))
return im.resize(s, Image.ANTIALIAS)
size = (200, 200)
def do_crop(img):
im = Image.open(img)
im = crop(im, size)
im.putalpha(prepare_mask(size, 4))
output = str(img).replace('jpg', 'png')
try:
os.remove(img)
except:
print(f"[INFO] Error deleting photo [{img}]")
else:
print(f'[INFO] Photo deleted successfully [{img}]')
try:
im.save(output)
print(f"[INFO] Photo saved successfully [{output}]")
except:
print(f"[INFO] Error saving photo [{output}]")
接下来,在另一个文件的代码中,我尝试以 PDF 格式查看这张照片。
self.can.drawImage(f'user_images\{self.user_id}user_photo.png', 300, 500, 200, 200)
#self.can - Canvas OBJECT
之后,不幸的是,当我在原始PDF文件中保存所有内容时,这张照片不是圆的,而是变成了方的,添加了边框,我该怎么办?
我正在为有类似问题的人写这篇文章,一切都很简单,插入一张圆形照片,它有一个“透明”背景,我不会完全解释它是如何工作的,但这是你需要做的让 reportlab 明白你想要什么。
以前的版本。
self.can.drawImage(f'user_images\{self.user_id}user_photo.png', 300, 500, 200, 200)
新版本
self.can.drawImage(f'user_images\{self.user_id}user_photo.png', 300, 500, 200, 200, mask='auto')
添加参数mask = 'auto'