PHP и GD, кажется, испытывают затруднения при создании изображений из PNGs шкалы полутонов типа с альфой при использовании imagecreatefrompng()
. Результаты невероятно искажены.
Я задавался вопросом, знал ли кто-либо о способе протестировать на тип цвета для уведомления пользователя относительно несовместимости?
Пример:
Исходное изображение: http://dl.dropbox.com/u/246391/Robin.png
Получающееся изображение: http://dl.dropbox.com/u/246391/Robin_result.png
Код:
Удачи,
Aron
Тип цвета изображения PNG хранится на байтовом смещении 25 в файл (подсчет от 0). Так что, если вы сможете получить фактические байты файла PNG, просто посмотрите на байт 25 (я не делаю PHP, поэтому я не знаю, как это сделать):
Предыдущий байт (смещение 24) дает количество битов на канал. См. PNG SPEC для более подробной информации.
В небольшом повороте файл PNG может иметь «1-битный альфа» (например, GIFS), имея кусок Trns (когда это цвет типа 0 2 или 3).
см. ответ. :
Еще одна полезная заметка для тех, кто использует 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
Я приземлился здесь, ищут способ сказать (через PHP), если определенное изображение .png - Alpha-Png One -
Ответ Дэвида Джонса указывает на правильное направление, действительно прост в реализации в 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-пользователей-сгенерированных-страниц, для замены всех тегов с Inline-Block
.alpha_png_span{
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(
src='$alpha_png_candidate', sizingMethod='crop')
}
... И все это работает, так что спасибо!
Паоло