首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何自动检测调色板与真彩色png

如何自动检测调色板与真彩色png
EN

Stack Overflow用户
提问于 2012-02-01 04:28:24
回答 1查看 375关注 0票数 1

如GD手册中所述,下面的代码总是生成调色板图像:

代码语言:javascript
运行
复制
$image = GD::Image->newFromPngData($mydata);

而下面的代码会生成真彩色图像:

代码语言:javascript
运行
复制
$image = GD::Image->newFromPngData($mydata,1);

然而,我想做的是做一些自动检测:

对“8位色彩映射表png”使用调色板,但对“8位/彩色RGB png”文件使用真彩色。

我原以为这是默认设置,但事实并非如此。

我在libgd手册中没有发现这是可能的。是否有可能通过手动读取png报头中的信息来从数据本身中提取此信息?

为了更清楚地说明这一点,这里有一些代码示例,它不会自动检测任何东西:

代码语言:javascript
运行
复制
#!/usr/bin/perl

use GD;

$image = GD::Image->newFromPng($ARGV[0]);

if ($image->isTrueColor()) {
  print "truecolor\n";
} else {
  print "indexed\n";
}
EN

回答 1

Stack Overflow用户

发布于 2012-02-01 04:48:57

在文件头中搜索您想要的内容可能是可能的,但结果可能容易出错。

最好使用可以为您解析头部的工具。CPAN搜索显示了一些可能有效的方法:

  • Image::ExifTool
  • Image::EXIF
  • Image::PNG

还有其他的。

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

如果图像文件本身是真彩色,则通过读取

图像创建的PNG图像将是真彩色。要强制图像基于调色板,请在可选的$truecolor参数中传递值0。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9086458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档