使用imagecreatefrompng()
时,PHP和GD似乎无法使用alpha格式创建灰度类型的PNG图像。结果令人难以置信的扭曲。
我想知道是否有人知道测试颜色类型的方法,以便通知用户不兼容?
示例:
原始图片:http://dl.dropbox.com/u/246391/Robin.png
结果图片:http://dl.dropbox.com/u/246391/Robin_result.png
代码:
<?php
$resource = imagecreatefrompng('./Robin.png');
header('Content-type: image/png');
imagepng($resource);
imagedestroy($resource);
干杯,
阿隆
答案 0 :(得分:9)
PNG图像的颜色类型存储在文件中的字节偏移25处(从0开始计数)。因此,如果您可以获得PNG文件的实际字节,只需查看字节25(我不做PHP,所以我不知道该怎么做):
前一个字节(偏移量24)给出每个通道的位数。有关详细信息,请参阅the PNG spec。
稍微扭曲一下,PNG文件可能具有“1位alpha”(如GIF),具有tRNS块(当颜色类型为0 2或3时)。
答案 1 :(得分:5)
我今天来到这里寻找一种方法告诉(通过php)一个特定的.png图像是否是一个alpha-png图像 -
大卫琼斯的答案指向了正确的方向,在php中很容易实现:
file_get_contents 只加载那个25'字节(确实是!),然后是 ord()获取其ASCII值,进行测试(在我的情况下为“6”)
if(ord(file_get_contents($alpha_png_candidate, NULL, NULL, 25, 1)) == 6) {
is_alpha_png_so_do_something();
}
实际上我需要它来确保与ie6的向后兼容性 在cms-user-generated-pages中,替换所有 alpha-png&lt; img&gt; 内联块&lt;标签 spans&gt; - 然后将alpha-png文件作为 ms-proprietary css属性过滤器
的变量。.alpha_png_span{
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(
src='$alpha_png_candidate', sizingMethod='crop')
}
......一切正常,谢谢!
保
答案 2 :(得分:0)
看到这个答案 :
使用ImageCreateFromPng的人的另一个有用的注意事项: PHP和GD无法识别灰度/ alpha图像。
因此,如果您使用透明度介于0%和100%之间的灰度图像,请将图像另存为RGB。
至少在PHP版本4.4.2-1和5.1.2-1中使用GIMP 2.2.8制作图片。
网址: http://php.net/manual/en/function.imagecreatefrompng.php