Intereting Posts
Обратный скошенный массив к многомерному Zend_Form: записи базы данных в таблице HTML с флажками PHP Как закрыть теги html из этого массива? Как автоматически выйти из системы при закрытии браузера? Поиск массива для определенной строки Прочитать подтверждение с помощью PHPMAILER PHP – MySQL получает значение параметра out из хранимой процедуры Какая лучшая передача функций – переменные или массивы / объекты? Должен ли я хранить названия стран в mysql для каждого пользователя? Передача многомерного массива javascript между страницами PHP Неустранимая ошибка: допустимый размер памяти 33554432 байт исчерпан (пытался выделить 41007872 байта) PHP: Android теряет информацию о сеансе и cookie при использовании встроенного видеопроигрывателя Что такое хорошая настройка для редактирования PHP в Emacs? сообщение в tumblr с помощью php Explode, который не возвращает пустые строки?

Как проверить PNG для оттенков серого / альфа-типа?

PHP и GD, похоже, создают проблемы с созданием изображений из PNG типа greyscale с альфой при использовании imagecreatefrompng() . Результаты невероятно искажены.

Мне было интересно, знал ли кто-нибудь о способе тестирования типа цвета, чтобы уведомить пользователя о несовместимости?

Пример:

Оригинальное изображение: http://img.ruphp.com/php/Robin.png
Результат: http://img.ruphp.com/php/Robin_result.png

Код:

 <?php $resource = imagecreatefrompng('./Robin.png'); header('Content-type: image/png'); imagepng($resource); imagedestroy($resource); 

Ура,

Aron

Тип цвета PNG-изображения сохраняется в смещении 25 байта в файле (считая от 0). Поэтому, если вы можете получить фактические байты PNG-файла, просто посмотрите на байт 25 (я не занимаюсь PHP, поэтому я не знаю, как это сделать):

  • 0 – оттенки серого
  • 2 – RGB
  • 3 – RGB с палитрой
  • 4 – оттенки серого + альфа
  • 6 – RGB + альфа

Предыдущий байт (смещение 24) дает количество бит на канал. Дополнительную информацию см. В спецификации PNG .

При небольшом скручивании PNG-файл может иметь «1-битную альфа» (например, GIF), имея фрагмент tRNS (когда он имеет тип цвета 0 2 или 3).

я приземлился здесь сегодня, пытаясь найти способ рассказать (через php), если конкретное .png изображение является альфа-пнг одним –
Ответ Дэвида Джонса указывает на правильное направление, очень легко реализовать в php:

file_get_contents, чтобы загрузить только этот 25-байтовый (вот он, действительно!) и
ord (), чтобы получить его значение ASCII, проверить его (против «6» в моем случае)

 if(ord(file_get_contents($alpha_png_candidate, NULL, NULL, 25, 1)) == 6) { is_alpha_png_so_do_something(); } 

на самом деле я нуждался в том, чтобы обеспечить обратную совместимость с ie6 в cms-user-generated-pages, чтобы заменить все теги alpha-png <img> встроенным блоком <span>> , тогда файл alpha-png будет использоваться как переменная для ms-проприетарный фильтр свойств CSS

 .alpha_png_span{ filter: progid:DXImageTransform.Microsoft.AlphaImageLoader( src='$alpha_png_candidate', sizingMethod='crop') } 

… и все это работает, так что спасибо!

паоло

см. этот ответ:

Еще одна полезная заметка для тех, кто использует ImageCreateFromPng: PHP и GD, не распознает полутоновые / альфа-изображения.

Поэтому, если вы используете полутоновые изображения с прозрачностью от 0% до 100%, сохраните изображение как RGB.

По крайней мере, это верно для PHP версии 4.4.2-1 и 5.1.2-1 с картинками, выполненными с использованием GIMP 2.2.8.

url: http://php.net/manual/en/function.imagecreatefrompng.php