我需要将每种颜色的黄色变为蓝色,并将每种颜色的深灰色变为浅灰色的PNG图像中的透明度。
问题是:
我无法使用Photoshop,因为我有100张图片,而且我需要多次更改色调。 我不能使用Image Magick,因为我需要比'-fx'更复杂的计算。 我不能使用PHP imagefrompng(),因为这个讨厌的废话不适用于我的很多图像, 即使有所有建议的修复,例如:
$background = imagecolorallocate($png, 255, 255, 255);
// removing the black from the placeholder
imagecolortransparent($png, $background);
// turning off alpha blending (to ensure alpha channel information is preserved, rather than removed (blending with the rest of the image in the form of black))
imagealphablending($png, true);
// turning on alpha channel information saving (to ensure the full range of transparency is preserved)
imagesavealpha($png, true);
等等。它适用于某些图像,但不适用于其他图像。
我需要的只是一个PNG库(可能不是PHP),它可以给我坐标x,y处的像素的红色,绿色,蓝色和alpha分量,然后在我的计算后设置这个像素,例如:< / p>
$rgba = getrgba($image, $x, $y);
$rgba = my_function($rgba);
setrgba($image, $x, $y, $rgba);
也许您可以推荐其他语言的库,而不仅仅是PHP?
答案 0 :(得分:0)
如果您不介意使用Python,请查看Pillow,特别是其PixelAccess课程。这些主题(1,2)应该会有所帮助并且有一些代码示例。
答案 1 :(得分:0)
如果您只想获得R,G,B和Alpha的原始像素值而不必担心压缩和编码,请使用 ImageMagick 将图像转换为纯文本,未压缩,未编码的二进制文件和阅读并按照你的内心处理它。
所以,如果我们用RGBA(0,64,255,0.5)制作一个1x1像素的PNG文件来测试:
convert -size 1x1 xc:"rgba(0,64,255,0.5)" a.png
现在我们可以让 ImageMagick 制作一个原始的RGBA文件,您可以根据自己的意愿阅读和处理您想要的任何语言,无论您希望的复杂程度如何:
convert a.png rgba:data.bin
现在我们可以查看该文件:
xxd data.bin
<强>结果强>
0000000: 0040 ff80 .@..
在那里,您可以看到并读取所有RGBA像素。当你完成后,只需反过来取回一个PNG - 注意你必须首先告诉 ImageMagick 大小,因为它不知道这个:
convert -size 1x1 rgba:data.bin new.png
请注意, ImageMagick 是一个相当大的软件包,您可以使用更轻量级的vips
软件包实现与上述相同的功能:
vips VipsForeignSaveRaw a.png data.rgb
或者,如果您希望数据为未压缩的,人类可读的ASCII,请使用PPM
(便携式Pixmap)和PGM
(Portable Greymap)的古老NetPBM格式 - 请参阅NetPBM on Wikipedia
制作4x1图像并写为PPM:
convert -size 4x1 xc:"rgba(0,64,255,0.1)" -compress none ppm:-
P3
4 1
65535
0 16448 65535 0 16448 65535 0 16448 65535 0 16448 65535
你可以看到4个重复的RGB值。如果您想将其作为文件,只需使用ppm:-
更改最后的someFile.ppm
。
再次制作相同的图像,并将Alpha通道提取到单独的文件中:
convert -size 4x1 xc:"rgba(0,64,255,0.1)" -alpha extract -compress none pgm:-
P2
4 1
65535
6554 6554 6554 6554
希望您可以看到6554
为0.1
,范围为0-65535。
如果您只想要上述任何一项的8位数据,请添加-depth 8
。
正如Glenn在评论中所建议的那样,另一种选择是省略选项2上的-compress none
,它将为您提供一种非常相似的文件格式,除了像素数据将以二进制形式存在之后,标题保留在ASCII中。这通常更快更小。