Вопрос или проблема
У меня есть два изображения (схемы), и я хочу выделить различия на одном из них:
С помощью imagemagick я могу создать визуальное различие и также наложить его на второе изображение:
compare schematic.png schematic-new.png -compose src diff.png
composite -blend 35% diff.png schematic-new.png schematic_diff.png
Это дает почти то, что я хочу, но части в изображении различий, которые одинаковы, не полностью прозрачны, а имеют полупрозрачный сероватый цвет. Также использование blend
не совсем подходит, так как это добавляет прозрачность к базовому изображению.
Итак: Как я могу создать изображение различий так, чтобы неразличимые части были полностью прозрачны и как правильно наложить его на базовое изображение (возможно, даже с пользовательской прозрачностью)?
Чтобы избежать появления какого-либо неразличимого цвета на изображении различий, добавьте -lowlight-color none
, что специально устанавливает цвет как полностью прозрачный:
magick compare schematic.png schematic-new.png -compose src -lowlight-color none diff.png
Что касается наложения изображений, вы в основном использовали единственный предопределенный режим композиции, который смешивает прозрачности таким образом. Например, оба -dissolve
и -watermark
работают гораздо лучше в плане наложения слоя на другой с прозрачностью. Это выглядит довольно хорошо для меня, и я думаю, что близко к тому, что вы желаете:
magick composite -dissolve 30 diff.png schematic-new.png schematic_diff.png
При необходимости уменьшите процент 30
.
Ответ или решение
Для создания визуального различия между двумя изображениями и наложения его на одно из них с использованием ImageMagick, вам понадобится выполнить несколько шагов, чтобы добиться желаемого эффекта. Вот пошаговая инструкция, которая поможет вам решить вашу задачу.
Шаг 1: Создание изображения с различиями
Для начала, вам нужно создать изображение, которое будет выявлять отличия между оригинальным и изменённым изображением. Для этого используйте команду compare
, добавив параметр -lowlight-color none
, чтобы сделать непримечательные области полностью прозрачными:
magick compare schematic.png schematic-new.png -compose src -lowlight-color none diff.png
Эта команда создаст файл diff.png
, в котором отличия между двумя изображениями будут отображены, а области, которые совпадают, будут полностью прозрачными.
Шаг 2: Наложение диффа на оригинальное изображение
Теперь, когда у вас есть изображение с различиями, вы можете наложить его на второе изображение. Вместо использования composite
с -blend
, рекомендуется использовать режим компоновки -dissolve
, который позволит вам настроить уровень прозрачности:
magick composite -dissolve 30 diff.png schematic-new.png schematic_diff.png
Здесь 30
означает процентную величину, с которой будет накладываться изображение с различиями. Вы можете уменьшить это значение, если хотите более заметные отличия. После выполнения этой команды, вы получите файл schematic_diff.png
, на котором различия будут выделены на основе заданного уровня прозрачности.
Пример команды в целом
В итоге, полная команда, которая решает вашу задачу, выглядит следующим образом:
magick compare schematic.png schematic-new.png -compose src -lowlight-color none diff.png
magick composite -dissolve 30 diff.png schematic-new.png schematic_diff.png
Заключение
Следуя этим шагам, вы сможете создать визуальный дифф с полностью прозрачными областями и наложить его на второе изображение с заданным уровнем прозрачности. Если у вас возникнут дополнительные вопросы или потребуется больше информации, не стесняйтесь задавать!