Как проверить PNG на тип цвета шкалы полутонов/альфы?

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

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

Пример:

Исходное изображение: http://dl.dropbox.com/u/246391/Robin.png
Получающееся изображение: http://dl.dropbox.com/u/246391/Robin_result.png

Код:

Удачи,

Aron

7
задан ac94 13 January 2010 в 16:51
поделиться

3 ответа

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

  • 0 - Greyscale
  • 2 - RGB
  • 3 - RGB с палитрой
  • 4 - GREYSCALE + ALPHA
  • 6 - RGB + ALPHA

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

В небольшом повороте файл PNG может иметь «1-битный альфа» (например, GIFS), имея кусок Trns (когда это цвет типа 0 2 или 3).

9
ответ дан 6 December 2019 в 15:22
поделиться

см. ответ. :

Еще одна полезная заметка для тех, кто использует 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

0
ответ дан 6 December 2019 в 15:22
поделиться

Я приземлился здесь, ищут способ сказать (через 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 будет подан в качестве переменной Для свойства CSS фильтр

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

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

Паоло

5
ответ дан 6 December 2019 в 15:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: