Создайте визуальное различие между двумя изображениями и наложите его на одно из них с помощью ImageMagick.

Вопрос или проблема

У меня есть два изображения (схемы), и я хочу выделить различия на одном из них:
схема1
схема2

С помощью 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

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...