首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Python和Pillow将此索引的PNG转换为灰度并保持透明度?

如何使用Python和Pillow将此索引的PNG转换为灰度并保持透明度?
EN

Stack Overflow用户
提问于 2018-07-20 23:07:28
回答 1查看 1.7K关注 0票数 2

我正在尝试使用Python/Pillow将图像转换为灰度。我在大多数图像中都没有遇到困难,但是后来,在测试不同的图像时,我从BeeWare项目中找到了这个徽标,我知道它已经被一些图像编辑器进一步编辑,并使用ImageOptim重新压缩。

图像有某种透明度(在蜜蜂周围的整个白色区域),但黑色被弄乱了。代码如下:

#/usr/bin/env python3

import os
from PIL import Image, ImageFile

src_path = os.path.expanduser("~/Desktop/prob.png")
img = Image.open(src_path)
folder, filename = os.path.split(src_path)
temp_file_path = os.path.join(folder + "/~temp~" + filename)


if 'transparency' in img.info:
    transparency = img.info['transparency']
else:
    transparency = None

if img.mode == "P":
    img = img.convert("LA").convert("P")

try:
    img.save(temp_file_path, optimize=True, format="PNG", transparency=transparency)
except IOError:
    ImageFile.MAXBLOCK = img.size[0] * img.size[1]
    img.save(temp_file_path, optimize=True, format="PNG", transparency=transparency)

我还尝试了这个:

png_info = img.info

if img.mode == "P":
    img = img.convert("LA").convert("P")

try:
    img.save(temp_file_path, optimize=True, format="PNG", **png_info)
except IOError:
    ImageFile.MAXBLOCK = img.size[0] * img.size[1]
    img.save(temp_file_path, optimize=True, format="PNG", **png_info)

无论使用哪种方法,图像中的所有黑色都会变得透明。

我正在尝试理解我在这里遗漏了什么,或者这是否是Pillow中的某个bug或限制。稍微挖掘一下图像调色板,我会说透明度实际上是分配给调色板中的黑色的。例如,如果我将其转换为RGBA模式,则外部将变为黑色。所以一定还有其他东西让外面的区域变得透明。

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2021-01-07 03:42:00

找不到一种方法让我的.png“索引”或使用调色板。最终要做的是:

将alpha channel

  • converting保存到"L“,然后返回"RGB"

  • re-applying
  • (也称为透明)

    img_colored = Image.open("transparency.png")
    img_colored.load()
    alpha = img_colored.split()[-1]
    img_grey = img_colored.convert("L").convert("RGB")
    img_grey.putalpha(alpha)

可能效率不高,但它能完成工作

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51445513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档