«Заменить» изображение (градиент) в изображении с альфой

Рассмотрим следующий рисунок:

пример

Обратите внимание, что фон первого изображения прозрачен, а синий фон на втором и третьем изображениях представляет собой тонкий градиент, а не сплошной цвет.

По сути, дайте 2-е изображение и 3-е, как я могу найти разницу между ними, чтобы (примерно) создать 1-е изображение?

Я открыт для любого ответа, от «как это сделать в% Program%» до «найти разницу между обоими значениями rgb и умножить на ...»

PS: я только что понял, что поменял первое изображение на второе на графике. Очевидно, вы начинаете с градиента, а затем накладываете на него наложение.

PS: в GIMP есть функция под названием «Заменить цвет на альфа-канал», в основном она делает то, что мне нужно, но использует определенный цвет. В моем случае цвет будет зависеть от положения.

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

Ответы (1)

Если у вас установлен imagemagick (если у вас его нет и вы работаете на Mac, я бы порекомендовал использовать homebrew ), есть очень простой способ, который поможет вам приблизиться...

см. эту статью здесь: https://legacy.imagemagick.org/Usage/compose/#changemask

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

convert original.png background.png -compose ChangeMask -composite result.png

с изображением со всем, что является оригинальным.png, синим фоном градиента, являющимся фоновым.png, и выходным (прозрачным), являющимся результатом.png (или как вы хотите, чтобы он назывался).

введите описание изображения здесь

Вы можете видеть результат выше... он успешно удаляет фон, но сглаживание элементов все еще несколько синее.

Может быть, вам этого достаточно... если нет, все становится намного сложнее быстро.

Проблема в том, что для этих краевых пикселей неочевидно, какая у них комбинация цвета/прозрачности.

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

Но это нетривиально, насколько я знаю.

Чтобы получить действительно хороший результат, в идеале у вас есть две версии изображения на разных фонах (белый и черный — это классика), и тогда эта техника работает:

https://legacy.imagemagick.org/Usage/masking/#two_background

В любом случае, скрестим пальцы, первого варианта может быть достаточно для ваших нужд.

Спасибо за (очень) информативный ответ, очень признателен! Хотя на данный момент у меня нет конкретной проблемы, которую нужно решить, мне было любопытно, какими возможными способами ее можно решить. Обычно я делаю такие вещи вручную (например, вручную заменяю синий цвет по краям).
без проблем! в этом случае первый подход определенно сэкономит вам немного времени, избавившись от основных областей фона.
«Чтобы получить действительно хороший результат, в идеале нужно иметь две версии изображения на разных фонах» — очень интересно. Было бы интересно попробовать это для физического полупрозрачного объекта.