我有一组上透明背景的白色图标,我想反转他们全部是黑色的透明背景。
试图与PIL(ImageChops),但它似乎并不具有透明背景的工作。 我也尝试GIMP的Python接口,但没有运气,无论是。
任何想法如何反向最好在Python实现?
我有一组上透明背景的白色图标,我想反转他们全部是黑色的透明背景。
试图与PIL(ImageChops),但它似乎并不具有透明背景的工作。 我也尝试GIMP的Python接口,但没有运气,无论是。
任何想法如何反向最好在Python实现?
ImageChops.invert
似乎也反转每个像素的alpha通道。
这应该做的工作:
import Image
img = Image.open('image.png').convert('RGBA')
r, g, b, a = img.split()
def invert(image):
return image.point(lambda p: 255 - p)
r, g, b = map(invert, (r, g, b))
img2 = Image.merge(img.mode, (r, g, b, a))
img2.save('image2.png')
我曾尝试橡果的做法,但结果却是有些奇怪(下面的图像的顶部)。
底部的图标是我真正想要的,我用它来实现难懂的的转换方法:
convert tools.png -negate tools_black.png
(本身并不Python,但Python包装存在,像PythonMagickWand 。
唯一的缺点是,你必须安装一堆的依赖让ImageMagick的工作,但它似乎是一个功能强大的图像处理框架。
你可以做到这一点很容易PIL
,就像这样:
RGBA
,通过使用convert('RGBA')
RGBA
带。 RGB
带(在你的情况下,我们通过它们都设置为黑point
功能),但不接触的alpha波段。 继承人的代码:
import Image
im = Image.open('image.png')
im = im.convert('RGBA')
r, g, b, a = im.split()
r = g = b = r.point(lambda i: 0)
im = Image.merge('RGBA', (r, g, b, a))
im.save('saved.png')
试一试。
import Image, numpy
pixels = numpy.array(Image.open('myimage.png'))
pixels[:,:,0:3] = 255 - pixels[:,:,0:3] # invert
Image.fromarray(pixels).save('out.png')
也许是最快的解决方案至今,因为它不解释了“为每个像素”环内的任何Python代码。