작은 테두리를 유지하면서 Imagemagick을 사용하여 자동으로 자르는 방법은 무엇입니까?

작은 테두리를 유지하면서 Imagemagick을 사용하여 자동으로 자르는 방법은 무엇입니까?

검은색 펠트 배경에 동전 그림이 있는 파일이 많이 있습니다. ImageMagick을 사용하면 -trim 및 -fuzz를 사용하여 이러한 이미지를 상당히 간단하게 자동 다듬을 수 있습니다.

가장자리 감지는 잘 작동합니다. 제가 찾고 싶은 것은 "가장자리를 찾은 다음 10픽셀을 백업합니다"라고 말할 수 있는 매개변수입니다. 즉, 동전 주위를 자르는 대신 동전 주위에 10픽셀 둘레를 유지합니다. 그것. -splice 명령과 같이 새 테두리를 추가하고 싶지 않고 원본 이미지의 간격을 유지하고 싶습니다.

지금까지 나는 그것을 할 수 있는 방법을 찾지 못했습니다. 내가 생각해낸 가장 가까운 방법은 -trim info:- 모드에서 실행하고 출력을 캡처하고 수동 자르기를 사용하여 자르기를 다시 계산하는 것입니다. 그러나 나는 정말로 선호합니다 한 단계 프로세스.

저는 Windows 10에서 ImageMagick을 사용하고 있으며 bash 확장을 설치하는 동안 그 아래의 스크립트를 테스트하지 않았으므로 Imagemagick 명령줄만 사용하는 솔루션이 선호됩니다.

답변1

우아한 솔루션이 부족하여 작동하는 솔루션을 사용하여 작업을 훌륭하게 수행하는 것처럼 보이는 조잡한 bash 스크립트를 작성했습니다. 이렇게 하면 배경을 제공하기 위해 원본 그래픽을 사용하여 동전 전체에 25px 오프셋이 남습니다. 결국에는 이를 매개변수화하고 정리할 예정이지만 이는 오늘 작업하는 스크립트입니다.

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

답변2

-border이를 위해 and를 사용할 수 있습니다 -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

관련 정보