Преобразование изображения в градациях серого в изображение альфа-канала в оболочке Unix
14
У меня серое изображение. Я хочу преобразовать его в прозрачный PNG, чтобы черные пиксели (в исходном изображении) становились полностью непрозрачными, белые пиксели становились полностью прозрачными, 50% -ый серый пиксель становился бы прозрачным на 50%, и так далее для всех оттенков между.
Как мне этого добиться?
(Да, я знаю, что это почти тот же вопрос, что и Преобразование оттенков серого в альфа-канал , но я хочу знать, как это сделать, используя только инструменты командной строки - например, ImageMagick или NetPBM.)
Вот пример результата из вышеупомянутого вопроса. Этот пример - результат, которого я хотел бы достичь, используя только инструменты командной строки.
Если вы откроете этот PNG в средстве просмотра, поддерживающем прозрачность, вы поймете, что я имею в виду.
Ooookay. После множества поисков в Google и прочтения большего количества руководства по ImageMagick, чем я на самом деле забочусь, вот ответ. Учитывая, что у вас есть изображение в градациях серого source.png, вот мои команды.
Чтобы сделать черные пиксели прозрачными и сохранить белые пиксели такими, какие они есть, выполните следующую команду:
Давайте объясним эту последнюю команду немного более подробно:
convert - это команда ImageMagic (одна из нескольких)
source.png - Исходное изображение в оттенках серого.
-alpha copy - Скопируйте содержимое предыдущего файла в альфа-канал.
-channel alpha - Укажите, что только следующие операторы должны влиять на альфа-канал.
-negate- Инвертировать альфа-канал (из-за предыдущего -chanel alphaне повлияет на любую другую часть изображения).
+channel- Укажите, что только следующие операторы должны влиять на цветовые каналы и больше не изменять альфа-канал. (Это значение по умолчанию, и поэтому нам не нужно предоставлять его в первом, более простом примере.)
-fx '#000'- Замените содержимое цветного канала черными пикселями. (Из-за +channelальфа-канала это не повлияет).
Очень важно включить этот финал -fx параметр, иначе все полупрозрачные пиксели в сгенерированном изображении сохранят цвета. (Поскольку эти пиксели полупрозрачны, это может быть неочевидно, но конечный результат не соответствует ожиданиям.)
Довольно хорошее объяснение для достижения моей цели, когда я использую вторую команду, которая делает мое изображение более темным, чем фактическое изображение в градациях серого. На самом деле моя цель - добиться того же цветового тона, который присутствует в градациях серого, кроме той прозрачности, как ожидалось. Любая идея для достижения этого?
Хардик Патель
это очень полезно, спасибо! :) рад, что мне не пришлось самому в этом разобраться
не знаю почему, но в текущей версии (ImageMagick 7.0.7-21) в результате я получаю только чисто белое / черное изображение без альфа-канала. Я скопировал командную строку дословно, изменив только пути ввода / вывода файла. Может быть, они сделали некоторые несовместимые назад изменения.
Отображаемое имя
0
С ImageMagick 7.0, ответ выше не работает. Но вы можете использовать:
С ImageMagick 7.0, ответ выше не работает. Но вы можете использовать:
convert source.png -channel rgb -fx '#fff' result.png
Ака, заполните каналы RGB пробелом, и пусть альфа как раньше.
источник
С imagemagick 7 я считаю необходимым указать
-channel RGB
перед-fx
, иначе вы получите сплошное черное изображение, например так:И отрицание полезно, если вы хотите, чтобы черный был непрозрачным, а белый - прозрачным:
источник