PHP原始16位颜色


PHP raw 16bit color

是否有办法将16位(灰度)颜色PNG转换为使用PHP的RGBA4444颜色格式?

或者

是否有一种方法来加载这个16位灰度PNG使用RGBA4444格式?

PNG标题说明它使用16位颜色(位深)和灰度颜色(颜色类型)(http://www.fileformat.info/format/png/corion.htm, IHDR图像标题)。

$rgb = imagecolorat($src, $x, $y);
var_dump("RGB - ".dechex($rgb));
$rgba = imagecolorsforindex($src, $rgb);
var_dump("RGBA - ".dechex($rgba));

$rgbA7, $rgba[A7, A7, A7, 0]为例。

BTW,这是上述文件的头文件:

89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 | .PNG........IHDR
00 00 03 FF 00 00 03 FF 10 00 00 00 00 E3 F9 FF | ................
C9 00 00 00 0D 74 45 58 74 44 46 4D 54 00 52 34 | .....tEXtDFMT.R4
47 34 42 34 41 34 E0 94 BA 92 00 00 20 00 49 44 | G4B4A4........ID
41 54 .. ..                                     | AT
编辑:

我首先做的是遵循Charlie (https://stackoverflow.com/a/7293429/2205703)的代码。(当然是做了一些修改。)然后将每个16位颜色格式(基于tEXt块)转换为RGBA8888格式。

然后,将它们pack()为PNG文件格式。但是我仍然有图像错误

Brad的回答还不错。截断到8位对于灰度图像来说已经足够好了。RGBA将以透明图像结束,这可能不是您真正想要的。您是否已经尝试转换为全彩色24位图像?结果仍然看起来像灰度,如果你可以简单地将其降低到8位。

使用imagick将使这个过程简单得多:

convert source-image.png -evaluate multiply 16 -depth 8 destination-image.png