有什么办法可以在 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'