如GD手册中所述,以下代码始终生成调色板图像:
$image = GD::Image->newFromPngData($mydata);
以下产生真彩色图像:
$image = GD::Image->newFromPngData($mydata,1);
然而,我想要的是进行某种自动检测:
使用“8位色图png”调色板,但使用truecolor作为“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";
}
答案 0 :(得分:2)
可能会搜索文件的标题以查找您想要的内容,但结果可能容易出错。
最好使用可以为您解析标头的工具。 CPAN搜索显示了一些可能效果很好的搜索:
和其他人。
但是从GD文档中,当newFromPngData
只传递一个参数时,似乎自动检测是默认的:
如果是图像,通过读取PNG图像创建的图像将是真彩色 文件本身是truecolor。要强制图像基于调色板,请传递 可选的$ truecolor参数中的值为0。
如果自动检测不起作用,您应该验证您的源文件确实是您认为的那样,如果GD解释错误,也许您应该发送错误报告。