好吧,情况是这样的:
我想使用Python图像库来“主题化”这样的图像:
主题颜色:"#33B5E5"
输入:
输出:
我在ImageMagick中使用以下命令得到了结果:
convert image.png -colorspace gray image.png
mogrify -fill "#33b5e5" -tint 100 image.png
说明:
首先将图像转换为黑白,然后对其进行主题化。
我想用Python图像库得到同样的结果。 但似乎我在使用它时遇到了一些问题,因为:
我正试图使用这个脚本:
import Image
import ImageEnhance
def image_overlay(src, color="#FFFFFF", alpha=0.5):
overlay = Image.new(src.mode, src.size, color)
bw_src = ImageEnhance.Color(src).enhance(0.0)
return Image.blend(bw_src, overlay, alpha)
img = Image.open("image.png")
image_overlay(img, "#33b5e5", 0.5)
你可以看到我没有先把它转换成灰度,因为这也不适用于透明度。
很抱歉在一个问题中发表了这么多问题,但我不能做其他任何事情:$
希望你们都能理解。
你需要先转换成灰度。我所做的:
Image.split()
获取原始alpha层ImageOps.colorize
着色结果代码:
注意:这里有一个Python 3/枕头叉的PIL版本的答案here。
更新4:我猜上次对我答案的更新毕竟不是最后一次。尽管将其转换为专门使用
PIL
是一个重大改进,但有一些事情似乎应该有更好、不那么尴尬的方法,只要PIL
有能力。在仔细阅读了文档和一些源代码之后,我意识到我想要做的实际上是可能的。取而代之的是,现在它必须构建手动使用的查找表,因此整个代码稍微长一些。然而,结果是只需要调用相对较慢的
Image.point()
方法一次,而不需要调用其中的三次。这是一个屏幕截图,左侧显示输入图像,右侧显示相应的输出。上面的一行是有一个alpha层的,下面的一行是没有alpha层的。
相关问题 更多 >
编程相关推荐