Преобразование изображения в градациях серого в изображение альфа-канала в оболочке Unix


14

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

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

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

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

Образец

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

Ответы:


18

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 весьма полезным.


Довольно хорошее объяснение для достижения моей цели, когда я использую вторую команду, которая делает мое изображение более темным, чем фактическое изображение в градациях серого. На самом деле моя цель - добиться того же цветового тона, который присутствует в градациях серого, кроме той прозрачности, как ожидалось. Любая идея для достижения этого?
Хардик Патель

это очень полезно, спасибо! :) рад, что мне не пришлось самому в этом разобраться
Сэм Уоткинс,

Я люблю тебя!!!!!!
Мескарра

Подобные комментарии, вероятно, лучше отправлять мне через этот канал: okcupid.com/profile/zrajm :)
zrajm

1
не знаю почему, но в текущей версии (ImageMagick 7.0.7-21) в результате я получаю только чисто белое / черное изображение без альфа-канала. Я скопировал командную строку дословно, изменив только пути ввода / вывода файла. Может быть, они сделали некоторые несовместимые назад изменения.
Отображаемое имя

0

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

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

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


Я подозреваю, что вы пропустили '-альфа-копию' :)
Крис

0

С imagemagick 7 я считаю необходимым указать -channel RGBперед -fx, иначе вы получите сплошное черное изображение, например так:

convert input.png -alpha copy -channel RGB -fx '#000' out.png

И отрицание полезно, если вы хотите, чтобы черный был непрозрачным, а белый - прозрачным:

convert input.png -negate -alpha copy -channel RGB -fx '#000' out.png
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.