将PNG转换为预乘alpha的方法

Ips*_*gle 8 png imagemagick python-imaging-library premultiplied-alpha

寻找某种简单的Windows工具或流程,让我将一个或多个标准PNG转换为预乘alpha.

命令行工具是理想的; 我可以轻松访问PIL(Python Imaging Library)和Imagemagick,但如果它让生活更轻松,它将安装另一个工具.

谢谢!

Fra*_*nas 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())
Run Code Online (Sandbox Code Playgroud)

瞧瞧!


Nun*_*ces 13

根据要求使用ImageMagick:

convert in.png -background black -alpha Remove in.png -compose Copy_Opacity -composite out.png
Run Code Online (Sandbox Code Playgroud)

感谢@ mf511的更新.

  • 是的,但之前有效.使用它作为替代:`convert in.png -background black -alpha删除in.png -compose Copy_Opacity -composite out.png` (2认同)

Max*_*ime 2

我刚刚发布了一些 Python 和 C 代码,可以满足您的需求。它在 github 上: http: //github.com/maxme/PNG-Alpha-Premultiplier

Python 版本基于 cssndrx 响应。C版本基于libpng。

  • 难怪 python 版本很慢——你循环遍历每个像素。Francois 的 python 解决方案要快得多。 (2认同)