如GD手册中所述,下面的代码总是生成调色板图像:
$image = GD::Image->newFromPngData($mydata);
而下面的代码会生成真彩色图像:
$image = GD::Image->newFromPngData($mydata,1);
然而,我想做的是做一些自动检测:
对“8位色彩映射表png”使用调色板,但对“8位/彩色RGB png”文件使用真彩色。
我原以为这是默认设置,但事实并非如此。
我在libgd手册中没有发现这是可能的。是否有可能通过手动读取png报头中的信息来从数据本身中提取此信息?
为了更清楚地说明这一点,这里有一些代码示例,它不会自动检测任何东西:
#!/usr/bin/perl
use GD;
$image = GD::Image->newFromPng($ARGV[0]);
if ($image->isTrueColor()) {
print "truecolor\n";
} else {
print "indexed\n";
}
发布于 2012-02-01 04:48:57
在文件头中搜索您想要的内容可能是可能的,但结果可能容易出错。
最好使用可以为您解析头部的工具。CPAN搜索显示了一些可能有效的方法:
还有其他的。
但是从GD文档来看,当newFromPngData
只传递一个参数时,自动检测似乎是默认的:
如果图像文件本身是真彩色,则通过读取
图像创建的PNG图像将是真彩色。要强制图像基于调色板,请在可选的$truecolor参数中传递值0。
如果自动检测对你不起作用,你应该验证你的源文件确实是你认为的那样,如果GD错误地解释了它们,也许你应该发送一份错误报告。
https://stackoverflow.com/questions/9086458
复制相似问题