Как выполнить автоматическую обрезку с помощью Imagemagick, сохранив при этом небольшую рамку?

942
Stephen

У меня есть большое количество файлов с изображением монеты на черном войлочном фоне. Используя ImageMagick, я могу довольно просто автоматически обрезать эти изображения, используя -trim и -fuzz.

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

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

Я использую ImageMagick под Windows 10, и хотя я установил расширения bash, я не тестировал под ним никаких сценариев, поэтому было бы предпочтительнее решение, которое использует только командную строку Imagemagick.

0

2 ответа на вопрос

0
Stephen

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

for f in *.jpg; do trimbox=$(convert $f -fuzz 25% -format "%@" info:) orig=$trimbox first=$ trimbox=$ second=$ trimbox=$ third=$ fourth=$ #echo "trimbox: $orig first: $first second: $second third: $third fourth:$fourth" ((first+=50)) ((second+=50)) ((third-=25)) ((fourth-=25)) trimbox=$first"x"$second"+"$third"+"$fourth convert "$f" -crop "$trimbox" +repage "trimmed-$f" done 
0
user3538079

Вы можете использовать -borderи -bordercolorдля этого - например, для прозрачной границы, вы можете захотеть:

for f in *.jpg; do convert -fuzz 25% -trim -border 25 -bordercolor none +repage $f trimmed-$f done 

См. Http://www.imagemagick.org/Usage/crop/#border.

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