14

У меня серое изображение. Я хочу преобразовать его в прозрачный PNG, чтобы черные пиксели (в исходном изображении) становились полностью непрозрачными, белые пиксели становились полностью прозрачными, 50% серый пиксел становился 50% прозрачным, и так далее для всех оттенков. между.

Как мне этого добиться?

(Да, я знаю, что это почти тот же вопрос, что и Преобразование оттенков серого в альфа-канал, но я хочу знать, как это сделать, используя только инструменты командной строки, например ImageMagick или NetPBM.)

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

Образец

Если вы откроете этот PNG в средстве просмотра, поддерживающем прозрачность, вы поймете, что я имею в виду.

2 ответа2

17

Ooookay. После множества поисков в Google и прочтения большего количества руководства по ImageMagick, чем я на самом деле забочусь, вот ответ. Учитывая, что у вас есть изображение в градациях серого с именем source.png , вот мои команды.

Чтобы сделать черные пиксели прозрачными и сохранить белые пиксели такими, какие они есть, выполните следующую команду:

 convert source.png -alpha copy -fx '#fff' result.png

Вместо этого, чтобы сделать белые пиксели прозрачными , сохраняя черный как есть, используйте:

 convert source.png -alpha copy -channel alpha -negate +channel -fx '#000' result.png

Давайте объясним эту последнюю команду немного более подробно:

  • convert - команда ImageMagic (одна из нескольких)
  • source.png - Исходное изображение в оттенках серого.
  • -alpha copy - копировать содержимое предыдущего файла в альфа-канал.
  • -channel alpha - укажите, что только следующие операторы должны влиять на альфа-канал.
  • -negate - инвертировать альфа-канал (из-за предыдущего -chanel alpha не повлияет на любую другую часть изображения).
  • +channel - укажите, что только следующие операторы должны влиять на цветовые каналы и больше не изменять альфа-канал. (Это значение по умолчанию, и поэтому нам не нужно предоставлять его в первом, более простом примере.)
  • -fx '#000' - заменить содержимое цветного канала черными пикселями. (Из-за +channel альфа-канал не будет затронут).

Очень важно включить эту последнюю опцию -fx , иначе все полупрозрачные пиксели в сгенерированном изображении сохранят цвета. (Поскольку эти пиксели полупрозрачны, это может быть неочевидно, но конечный результат не соответствует ожиданиям.)

Я нашел список опций ImageMagick весьма полезным.

0

С ImageMagick 7.0, ответ выше не работает. Но вы можете использовать:

convert source.png -channel rgb -fx '#fff' result.png

Ака, заполните каналы RGB пробелом, и пусть альфа как раньше.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .