我正在尝试使用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模式,则外部将变为黑色。所以一定还有其他东西让外面的区域变得透明。
有什么建议吗?
发布于 2021-01-07 03:42:00
找不到一种方法让我的.png“索引”或使用调色板。最终要做的是:
将alpha channel
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)
可能效率不高,但它能完成工作
https://stackoverflow.com/questions/51445513
复制相似问题