如何检查 PNG 的灰度/alpha 颜色类型?
使用 imagecreatefrompng()
时,PHP 和 GD 似乎无法从带有 alpha 的灰度类型的 PNG 创建图像。结果极其扭曲。
我想知道是否有人知道一种测试颜色类型以通知用户不兼容的方法?
示例:
原始图像:http://dl.dropbox.com/u/246391/Robin。 .png
结果图像: http://dl.dropbox.com/u/246391/Robin_result.png< /a>
代码:
<?php
$resource = imagecreatefrompng('./Robin.png');
header('Content-type: image/png');
imagepng($resource);
imagedestroy($resource);
干杯,
阿伦
PHP and GD seem to have trouble creating images from PNGs of type greyscale with alpha when using imagecreatefrompng()
. The results are incredibly distorted.
I was wondering if anyone knew of a way to test for the colour type in order to notify the user of the incompatibility?
Example:
Original Image: http://dl.dropbox.com/u/246391/Robin.png
Resulting Image: http://dl.dropbox.com/u/246391/Robin_result.png
Code:
<?php
$resource = imagecreatefrompng('./Robin.png');
header('Content-type: image/png');
imagepng($resource);
imagedestroy($resource);
Cheers,
Aron
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
PNG 图像的颜色类型存储在文件中的字节偏移量 25 处(从 0 开始计数)。因此,如果您可以获取 PNG 文件的实际字节,只需查看字节 25(我不使用 PHP,所以我不知道该怎么做):
前面的字节(偏移量 24)给出每个通道的位数。有关更多详细信息,请参阅PNG 规范。
稍微有点不同的是,PNG 文件可能通过具有 tRNS 块(当颜色类型为 0 2 或 3 时)而具有“1 位 alpha”(如 GIF)。
The colour type of a PNG image is stored at byte offset 25 in the file (counting from 0). So if you can get hold of the actual bytes of the PNG file, simply look at byte 25 (I don't do PHP, so I don't know how to do that):
The preceding byte (offset 24) gives the number of bits per channel. See the PNG spec for more details.
In a slight twist a PNG file may have "1-bit alpha" (like GIFs) by having a tRNS chunk (when it is colour type 0 2 or 3).
我今天来到这里寻找一种方法来判断(通过 php)特定的 .png 图像是否是 alpha-png 图像 -
David Jones 的答案指出了正确的方向,在 php 中非常容易实现:
file_get_contents 加载 25' 字节(确实是这样!),并且
ord() 获取它的 ASCII 值,测试它(在我的例子中针对“6”)
实际上我需要它来确保与 ie6 的向后兼容性
在 cms-user- generated-pages 中,替换所有 alpha-png 图像>带有 inline-block < 的标签 spans > - alpha-png 文件将作为 ms-proprietary css 属性 filter 的变量
...并且一切正常,所以谢谢!
保罗
i landed here today searching for a way to tell (via php) if a specific .png image is an alpha-png one -
David Jones' answer points to the right direction, really easy to implement in php:
file_get_contents to load just that 25' byte (there it is, indeed!), and
ord() to get its ASCII value, to test it (against '6' in my case)
actually i needed that for assuring backward compatibility with ie6
within cms-user-generated-pages, to replace all alpha-png < img > tags with inline-block < spans > - the alpha-png file will then be served as variable for the ms-proprietary css property filter
...and it all works, so thanks!
paolo
看到这个答案
:
对于使用 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
see this answer
:
Another usefull note for those using ImageCreateFromPng:
PHP and GD do not recognize grayscale/alpha images.
So if you use grayscale images with transparency between 0% and 100%, then save the image as RGB.
At least this is true for PHP Version 4.4.2-1 and in 5.1.2-1 with pictures made with GIMP 2.2.8.
url :
http://php.net/manual/en/function.imagecreatefrompng.php