Wie kann ich mit Imagemagick automatisch trimmen, während eine kleine Grenze beibehalten wird?

992
Stephen

Ich habe eine große Anzahl von Dateien, die ein Bild einer Münze auf schwarzem Filzhintergrund haben. Mit ImageMagick kann ich diese Bilder ziemlich einfach mit -trim und -fuzz automatisch trimmen.

Die Kantenerkennung funktioniert gut. Was ich gerne finden würde, ist ein Parameter, mit dem ich sagen kann: "Die Kante finden, dann aber 10 Pixel zurücksetzen", dh einen 10-Pixel-Umkreis um die Münze behalten, anstatt direkt zu beschneiden es. Ich möchte nicht wie beim Befehl -splice einen neuen Rand hinzufügen, sondern den Abstand zum Originalbild beibehalten.

Bis jetzt habe ich keinen Weg gefunden, das zu tun, der nächste, den ich mir ausgedacht habe, ist, ihn im -trim info auszuführen: - Modus, Erfassung der Ausgabe und Neuberechnung des Ernteguts mit einem manuellen Zuschnitt, aber ich würde es vorziehen ein einstufiger Prozess.

Ich verwende ImageMagick unter Windows 10, und obwohl ich die Bash-Erweiterungen installiert habe, habe ich keine Skripts darunter getestet. Eine Lösung, die nur die Imagemagick-Befehlszeile verwendet, wäre zu bevorzugen.

0

2 Antworten auf die Frage

0
Stephen

Da es keine elegante Lösung gab, habe ich mich mit einer funktionierenden Lösung befasst und ein grobes Bash-Skript geschrieben, das die Arbeit gut zu machen scheint. Das bedeutet, dass um die gesamte Münze ein Abstand von 25 Pixeln entsteht, wobei die Originalgrafik als Hintergrund verwendet wird. Ich werde das letztendlich parametrieren und aufräumen, aber es ist das heutige Arbeitsskript.

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

Sie können -borderund -bordercolordafür verwenden - zB für einen transparenten Rand möchten Sie vielleicht:

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

Siehe http://www.imagemagick.org/Usage/crop/#border