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

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

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

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

2 ответа2

0

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

for f in *.jpg; do
    trimbox=$(convert $f -fuzz 25% -format "%@" info:)
    orig=$trimbox
    first=${trimbox%x*}
    trimbox=${trimbox#*x}
    second=${trimbox%%+*}
    trimbox=${trimbox#*+}
    third=${trimbox%+*}
    fourth=${trimbox#*+}
    #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

Вы можете использовать -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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .