如何自动检测调色板与truecolor png

时间:2012-01-31 20:28:24

标签: perl png gd

如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";
}

1 个答案:

答案 0 :(得分:2)

可能会搜索文件的标题以查找您想要的内容,但结果可能容易出错。

最好使用可以为您解析标头的工具。 CPAN搜索显示了一些可能效果很好的搜索:

和其他人。


但是从GD文档中,当newFromPngData只传递一个参数时,似乎自动检测是默认的:

  

如果是图像,通过读取PNG图像创建的图像将是真彩色   文件本身是truecolor。要强制图像基于调色板,请传递   可选的$ truecolor参数中的值为0。

如果自动检测不起作用,您应该验证您的源文件确实是您认为的那样,如果GD解释错误,也许您应该发送错误报告。