python PIL - 背景显示为不透明而非透明

3 投票
2 回答
2349 浏览
提问于 2025-04-15 14:38

我想从上传的图片(其实是头像)生成32x32大小的小缩略图。

为了确保缩略图不会小于这个尺寸,我想创建一个透明的32x32背景,然后把缩略图粘贴到这个背景上。

下面的代码是为了实现这个目的。不过,头像却显示在一个黑色的不透明背景上;在这个过程中,我丢失了透明度的信息。我哪里做错了呢?

def handle_image(img):
    size = SMALL_AVATAR_IMAGE_SIZE
    img.thumbnail(size, Image.ANTIALIAS)  
    img = img.convert('RGBA')
    background = Image.new('RGBA', size, (255, 255, 255, 0))
    background.paste(img, (0, (size[1] - img.size[1]) / 2), img)
    img = background
    processed_image_small = ContentFile(img.tostring('jpeg', img.mode))
    targetpath = str(self.user.id) + '_S' + '.jpg'
    self.img_small.save(targetpath, processed_image_small,save=False)

2 个回答

5

你正在生成一张JPG图片。JPG格式不支持背景透明。所以,如果你想要背景透明的话,就需要生成一张PNG图片。

5

这是因为JPEG格式无法保存RGBA图像中的透明信息。如果你想保存头像,建议使用PNG格式,因为它可以保留这些透明信息。

撰写回答