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, поэтому я не знаю, как это сделать):
Предыдущий байт (смещение 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