SilverMonkey имеет базовое решение с использованием Imagemagick.Но просьба была о прозрачном PNG.Поэтому я добавлю немного больше к его коду, чтобы сделать его прозрачным, добавив -alpha copy.
convert kitty2.jpg kitty1.jpg -compose minus -composite -auto-level -alpha copy watermark1.png
Вотдругой подход, который делает бинарную маску для водяного знака путем установки порога.Но это оставляет много шума.Поэтому я использую некоторую открытую морфологию, чтобы удалить шум, а затем морфологическую близость, чтобы попытаться заполнить там, где текст разбит.Затем я добавляю -alpha copy, чтобы сделать изображение прозрачным.Но текст белый, а оригинальный водяной знак был светло-серый.Поэтому я отключаю альфа, умножьте на 0,75, чтобы уменьшить яркость белых букв до серого, не влияя на альфа-канал.Затем снова включите альфа-канал.
convert kitty2.jpg kitty1.jpg -compose minus -composite -threshold 0.6% -morphology open diamond:1 -morphology close octagon:1 -alpha copy -alpha off -evaluate multiply 0.75 -alpha on watermark2.png
Подробнее о морфологии см. https://imagemagick.org/Usage/morphology/