Как я могу автоматически определить палитру против truecolor png - PullRequest
1 голос
/ 01 февраля 2012

Как описано в руководстве 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 Ответ

2 голосов
/ 01 февраля 2012

Возможно, вы можете найти в заголовке файла то, что вам нужно, но результаты, вероятно, будут подвержены ошибкам.

Лучше использовать инструмент, который может разобрать заголовок для вас. Поиск CPAN показывает несколько, которые могли бы работать хорошо:

и др.


Но из документации GD кажется, что автоопределение используется по умолчанию, когда newFromPngData передается только один аргумент:

Изображения, созданные при чтении изображений PNG, будут истинного цвета, если изображение Сам файл является truecolor. Чтобы заставить изображение быть основанным на палитре, передайте значение 0 в необязательном аргументе $ truecolor.

Если автоопределение не работает для вас, вы должны убедиться, что ваши исходные файлы действительно соответствуют вашим ожиданиям, и если GD интерпретирует их неправильно, возможно, вам следует отправить отчет об ошибке.

...