Как получить 8-битную глубину серого и альфа-канала с помощью ImageMagick? - PullRequest
4 голосов
/ 15 июня 2011

Я пытаюсь создать прозрачный PNG с ImageMagick. Независимо от заклинаний «конвертировать», когда я использую опознавать по изображению, он всегда говорит:

Depth: 8/1 bit
Channel depth:
  gray: 1 bit
  alpha: 1 bit

Когда я смотрю на прозрачный PNG, найденный в Интернете, он говорит:

Depth: 8 bit
  gray: 8 bit
  alpha: 8 bit

Причина, по которой это имеет значение, заключается в том, что я использую прозрачные PNG, которые я создаю в качестве водяного знака в FFMPEG. Когда я использую PNG, который создает ImageMagick, это приводит к тому, что видео выглядит с непрозрачностью 50%. Тем не менее, когда я использую PNG, который я нашел в Интернете, он работает нормально. Согласно определению, единственная разница - это глубина.

Вот некоторые вещи, которые я пробовал:

convert -size 640x480 xc:none -depth 8 test.png
convert -size 640x480 xc:transparent -depth 8 test.png

Еще одна вещь, которую я заметил, - это то, что Gimp показывает изображение ImageMagick, имеющее цветовое пространство градаций серого, даже несмотря на то, что идентификаторы говорят, что это RGB. Работающее изображение, которое я нашел в Интернете, показывает цветовое пространство RGB как в Gimp, так и в идентификации.

Есть идеи?

1 Ответ

1 голос
/ 20 августа 2012

Сначала о градациях серого ImageMagick.

ImageMagick на самом деле не имеет такого цветового пространства. Он только подделывает его в пространстве RGB, устанавливая все значения в каналах R (красный), G (зеленый) и B (синий) на одинаковые значения. (Если три значения не совпадают, изображение перестает быть оттенками серого.)


Во-вторых, о ваших (казалось бы) неудачных попытках создания изображений с 8-битным альфа-каналом.

Это вызвано тем, что вы не помещаете какие-либо другие значения 'color' в прозрачные области - они все простые (полностью прозрачные).

Попробуйте эту команду, которая преобразует встроенный ImageMagick logo: изображение:

convert              \
   logo:             \
  -bordercolor white \
  -background black  \
  +polaroid          \
   polaroid.png

Выходное изображение:

Polaroid effect by ImageMagick

с удовольствием покажет необходимые вам 8-битные альфа-значения:

identify -verbose polaroid.png | grep -A 4 "Channel depth:"

  Channel depth:
    red: 8-bit
    green: 8-bit
    blue: 8-bit
    alpha: 8-bit

Или попробуйте преобразовать встроенное rose: изображение в полупрозрачное:

convert  rose:  -alpha set  -channel A  -fx '0.5'  semitransp-rose.png

Тот же результат: 8-битная глубина для альфа-канала.

Чтобы изменить одну из ваших исходных команд:

convert  -size 640x480  xc:none  -depth 8  -channel A -fx 0.5  test.png

Если вы identify -verbose получите получившееся изображение, вы обнаружите, что каналы R, G и B имеют глубину только 1 бит, а канал A - 8 бит. Это потому, что он на самом деле использует значение, отличное от 0, в то время как все остальные каналы 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...