ImageOps.fit()在ICO图像中包含透明部分

时间:2013-07-07 22:19:10

标签: python python-imaging-library alpha

我有一个任何大小的源文件image.ico,并且想要创建缩略图。这是我现在正在使用的代码:

    converted_file = cStringIO.StringIO()
    thumb = ImageOps.fit(image, (width, height), Image.ANTIALIAS)
    thumb.save(converted_file, format='png')

我选择png作为扩展名,因为PIL不支持可能是罪魁祸首的ico文件。它的工作原理是不应用透明度。 alpha = 0的部分呈现黑色而不是透明。我该如何解决这个问题?

/修改

我也试过(see this answer):

    converted_file = cStringIO.StringIO()
    thumb = ImageOps.fit(image, (width, height), Image.ANTIALIAS)
    background = Image.new('RGBA', (width, height), (255, 255, 255, 0))
    background.paste(thumb, box = (0, 0, width, height))
    background.save(converted_file, format='png')

同样的效果。

1 个答案:

答案 0 :(得分:1)

问题确实是PIL不知道如何准确读取ICO文件。如何解决这个问题有两种可能性:

  1. 向PIL添加一个注册ICO格式的插件
  2. 使用Pillow,一种更新频繁的PIL分支
  3. 我选择使用Pillow,它也兼容Python 3并且有更多好处。

    1。 PIL插件

    Win32IconImagePlugin保存在项目的某个位置。导入PIL Image类后,导入插件以注册ICO支持:

    from PIL import Image
    import Win32IconImagePlugin
    

    你去了,现在你可以使用正确的格式:

    thumb.save(converted_file, format='ico')
    

    2。枕

    Pillow builtin support for ICO images

    只需移除pil并安装枕头:

    pip uninstall pil
    pip install pillow
    

    请务必更改所有全球进口商品:

    import Image, ImageOps
    

    from PIL import Image, ImageOps
    

    你去了,现在你可以使用正确的格式:

    thumb.save(converted_file, format='ico')