为 Windows 寻找某种简单的工具或流程,让我将一个或多个标准PNG转换为预乘alpha。
命令行工具是理想的;我可以轻松访问PIL(Python Imaging Library)和Imagemagick,但如果能让生活更轻松,还会安装其他工具。
谢谢!
答案 0 :(得分:13)
更完整版的cssndrx答案,使用numpy中的切片来提高速度:
import Image
import numpy
im = Image.open('myimage.png').convert('RGBA')
a = numpy.fromstring(im.tostring(), dtype=numpy.uint8)
alphaLayer = a[3::4] / 255.0
a[::4] *= alphaLayer
a[1::4] *= alphaLayer
a[2::4] *= alphaLayer
im = Image.fromstring("RGBA", im.size, a.tostring())
Et瞧!
答案 1 :(得分:12)
按要求使用ImageMagick:
convert in.png -background black -alpha Remove in.png -compose Copy_Opacity -composite out.png
感谢@ mf511进行更新。
答案 2 :(得分:2)
我刚刚在Python和C中发布了一些代码,可以满足您的需求。它在github上:http://github.com/maxme/PNG-Alpha-Premultiplier
Python版本基于cssndrx响应。 C版基于libpng。
答案 3 :(得分:1)
应该可以通过PIL来做到这一点。以下是步骤的大致概述:
1)加载图像并转换为numpy数组
im = Image.open('myimage.png').convert('RGBA')
matrix = numpy.array(im)
2)修改矩阵。矩阵是每行内像素列表的列表。像素表示为[r,g,b,a]。编写自己的函数将每个[r,g,b,a]像素转换为您想要的[r,g,b]值。
3)使用
将矩阵转换回图像 new_im = Image.fromarray(matrix)
答案 4 :(得分:0)
仅使用PIL:
def premultiplyAlpha(img):
# fake transparent image to blend with
transparent = Image.new("RGBA", img.size, (0, 0, 0, 0))
# blend with transparent image using own alpha
return Image.composite(img, transparent, img)