代码之家  ›  专栏  ›  技术社区  ›  shanyu

python pil-背景显示不透明而不是透明

  •  3
  • shanyu  · 技术社区  · 15 年前

    我想从上传的图片(实际上是虚拟人物)生成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 回复  |  直到 15 年前
        1
  •  5
  •   Pierre Bourdon    15 年前

    这是因为jpeg无法保存包含在rgba图像中的透明度信息。您可能希望将虚拟人物保存为PNG格式,该格式能够保存这些信息。

        2
  •  5
  •   Soviut    15 年前

    您正在生成一个JPG图像。JPEG不支持背景透明度。您需要生成一个PNG图像来支持透明胶片。