Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ImageOps.fit()在ICO图像中具有透明部分_Python_Python Imaging Library_Alpha - Fatal编程技术网

Python ImageOps.fit()在ICO图像中具有透明部分

Python ImageOps.fit()在ICO图像中具有透明部分,python,python-imaging-library,alpha,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文件。它的工作原理与不应用透明度这一

我有一个任意大小的源文件
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的零件渲染为黑色,而不是透明。如何修复此行为

/edit

我也试过():


同样的效果。

问题确实在于PIL不知道如何准确读取ICO文件。有两种方法可以解决此问题:

  • 向PIL添加一个注册ICO格式的插件
  • 使用枕头,一种更频繁更新的PIL叉子
  • 我选择了枕头,它也是Python 3兼容的,并且有更多的好东西

    1.PIL插件 将文件保存在项目中的某个位置。导入PIL图像类后,导入插件以注册ICO支持:

    from PIL import Image
    import Win32IconImagePlugin
    
    现在,您可以使用正确的格式:

    thumb.save(converted_file, format='ico')
    
    thumb.save(converted_file, format='ico')
    
    2.枕头

    只需拆下pil并安装枕头:

    pip uninstall pil
    pip install pillow
    
    确保更改所有全局pil导入:

    import Image, ImageOps
    

    现在,您可以使用正确的格式:

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

    你怎么看这张照片?例如,尝试在Chrome中打开它。透明区域是否仍然显示为黑色?是。这个答案可能就是解决方案: