Используя GraphicsMagick или ImageMagick, как я заменяю прозрачность цветом заливки?

Используя GraphicsMagick, довольно легко заменить один цвет прозрачностью...

gm convert -transparent magenta src.png dst.png

К сожалению, я не могу выяснить простой способ сделать полную противоположность. Если у меня есть файл изображения с прозрачностью альфа-канала, как я сочиняю, она на постоянном цветовом фоне затем отбрасывает теперь избыточный альфа-канал? Цвет фона должен влиять пиксели, которые были частично прозрачны, а также полностью прозрачны.

Я определил +matte опцию, но она буквально отбрасывает альфа-слой - обычно оставляющий пиксели цвета спама, где прозрачность была, а не например, использование - фоновая опция указать цвет фона для использования.

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

Я в настоящее время использую GraphicsMagick, но нет никакого обязательства - я переключусь на ImageMagick, если он сделает вещи легче.

Править

Когда я говорю, что "Цвет фона должен влиять пиксели, которые были частично прозрачны, а также полностью прозрачны". я подразумеваю, что результат должен быть явно, что я обычно ожидал бы от блитирования прозрачного спрайта на фон сплошного цвета. Частично прозрачные пиксели должны быть смешаны.

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

5
задан 21.11.2010, 20:26

3 ответа

Использование GraphicsMagick, -background color -extent 0x0 должен смочь заменить первые два шага в Вашем процессе (для ImageMagick, это было бы -mosaic вместо -extent). Я не уверен в третьем шаге, но он кажется, что Вы просто работаете +matte на изображении от первых двух шагов, таким образом, заключительный вызов выглядел бы примерно так:

gm convert -background color -extent 0x0 +matte src.png dst.png

или для ImageMagick,

convert src.png -background color -mosaic +matte dst.png
7
ответ дан 07.12.2019, 17:13

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

gm convert -channel matte -threshold 0% -channel RGB -fill [your background color] -opaque transparent -channel matte -threshold 100% src.png dst.png

-channel matte -threshold 0% пиксели наборов с любой прозрачностью к полностью прозрачному, -channel RGB -fill [your background color] -opaque transparent полностью прозрачные пиксели замен с данным цветом заливки, и -channel matte -threshold 100% удаляет прозрачность из всех пикселей.

1
ответ дан 07.12.2019, 17:13

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

composite smile.gif rose: rose-over.png

основание. В данных примерах это смешивает одно изображение по другому.

Теперь, если Вы хотите смешать изображение с прозрачностью по цвету сплошного фона, у Вас может или быть второе изображение с фоном (если это статично), или создайте основное single-color/flood-filled изображение тех же размеров во времени выполнения. Как Вы сделали бы, который зависит от того, если Вы используете оболочку или некоторый сценарий (Perl, PHP, и т.д.).

1
ответ дан 07.12.2019, 17:13

Теги

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