Php 如何检查PNG的灰度/alpha颜色类型?
当使用Php 如何检查PNG的灰度/alpha颜色类型?,php,png,gd,Php,Png,Gd,当使用imagecreatefromfrompng()时,PHP和GD似乎很难从带有alpha的greyscale类型的PNG创建图像。结果是难以置信的扭曲 我想知道是否有人知道测试颜色类型的方法,以便通知用户不兼容 例如: 原始图像: 结果图像: 代码: 查看此答案 : 对于使用ImageCreateFromPng的用户,另一个有用的注意事项是: PHP和GD无法识别灰度/alpha图像 因此,如果使用透明度介于0%和100%之间的灰度图像,则将图像另存为RGB。 至少在PHP版本4.4.2-
imagecreatefromfrompng()
时,PHP和GD似乎很难从带有alpha的greyscale类型的PNG创建图像。结果是难以置信的扭曲
我想知道是否有人知道测试颜色类型的方法,以便通知用户不兼容
例如:
原始图像:结果图像: 代码: 查看此答案 : 对于使用ImageCreateFromPng的用户,另一个有用的注意事项是: PHP和GD无法识别灰度/alpha图像 因此,如果使用透明度介于0%和100%之间的灰度图像,则将图像另存为RGB。 至少在PHP版本4.4.2-1和5.1.2-1中使用GIMP 2.2.8制作图片时是这样 网址:
PNG图像的颜色类型存储在文件的字节偏移量25处(从0开始计数)。因此,如果您可以获得PNG文件的实际字节,只需查看字节25(我不做PHP,所以我不知道如何做):
- 0-灰度
- 2-RGB
- 3-带调色板的RGB
- 4-灰度+α
- 6-RGB+α
稍微改变一下,一个PNG文件可能有一个tRNS块(当它是颜色类型0 2或3时)就有“1位alpha”(如GIF)。我今天登陆这里,寻找一种方法(通过php)来判断一个特定的.PNG图像是否是alpha-PNG-
David Jones的回答指向了正确的方向,非常容易在php中实现: 文件\u获取内容只加载25'字节(确实如此!),并且
ord()获取其ASCII值,并对其进行测试(在我的例子中是针对“6”) 实际上,我需要它来确保与ie6的向后兼容性 在cms用户生成的页面中,要用内联块替换所有alpha png
保罗你说的扭曲是什么意思?您需要采取某些步骤来保持alpha透明度。但是灰度问题。。。这对meI来说是新的,我更新了我的示例以包含示例图像。保持alpha透明度很好。GD无法处理的是具有透明度的灰度图像,请参见下面的haim evgi的回答。谢谢,但是,在尝试使用
imagecreatefrompng()
创建资源之前,我正在寻找一种检测图像是否具有透明度的灰度图像的方法。这些图像被提交到网站,因此很遗憾,我无法将图像重新保存为RBG(至少我不知道有什么方法)。使用(bool)(ord(file\u get\u contents($alpha\u png\u candidate,NULL,NULL,25,1))&4)
将告诉您是否存在alpha通道,无论图像是灰度还是rgb。
<?php
$resource = imagecreatefrompng('./Robin.png');
header('Content-type: image/png');
imagepng($resource);
imagedestroy($resource);
if(ord(file_get_contents($alpha_png_candidate, NULL, NULL, 25, 1)) == 6) {
is_alpha_png_so_do_something();
}
.alpha_png_span{
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(
src='$alpha_png_candidate', sizingMethod='crop')
}