Ich habe mehrere Bilddateien in einem Verzeichnis. Diese Bilder haben eine ähnliche Größe und dieselbe Hintergrundfarbe.
Wie kann ich alle Bilder gleich groß machen, indem ich Hintergrund wie dieses angehängte Bild hinzufüge?
Ich habe mehrere Bilddateien in einem Verzeichnis. Diese Bilder haben eine ähnliche Größe und dieselbe Hintergrundfarbe.
Wie kann ich alle Bilder gleich groß machen, indem ich Hintergrund wie dieses angehängte Bild hinzufüge?
Antworten:
Dies sollte mit allen Bildtypen arbeiten , dass ImageMagick ohne handhaben kann angeben *.png
, *.jpg
, *.jpeg
etc:
#!/bin/bash
images=$(identify -format '%f\n' * 2>/dev/null)
IFS=$'\n'
set -e
max_dims=$(
identify -format '%w %h\n' $images 2>/dev/null |
awk '($1>w){w=$1} ($2>h){h=$2} END{print w"x"h}'
)
orig_dir=originals_$(date +%Y-%m-%d_%T)
mkdir "$orig_dir"
mv -- $images "$orig_dir"
cd "$orig_dir"
set +e
for image in $images; do
convert -- "$image" -gravity Center -extent "$max_dims" "../$image"
done
Dadurch werden die Originalbilder in ein datiertes Verzeichnis verschoben, falls die Ergebnisse nicht erwünscht sind. Dies schlägt auch fehl, wenn die Bilddateien aus irgendeinem Grund Zeilenumbrüche in ihren Namen enthalten.
Dieses Skript könnte weitere Fehlermeldungen enthalten, um einen hilfreichen Hinweis zu geben, wenn ein Fehler aufgetreten ist. Wenn jedoch beim Verschieben der Bilder (alles zwischen set -e
und set +e
) ein Fehler auftritt , wird das Skript beendet. Hoffentlich wird dadurch irreversibler Schaden vermieden.
Jetzt mit awk
Skript, das schamlos aus @ terdons Antwort plagiiert wurde .
Solange Sie eine Zielgröße auswählen, die größer als Ihr größtes Bild ist, sollten Sie Folgendes tun:
mogrify -gravity Center -extent 200x200 -background white -colorspace RGB *png
Mit dem obigen Befehl wird die Originaldatei geändert. Möglicherweise möchten Sie eine Sicherungskopie erstellen , bevor Sie sie ausführen. Mit mogrify
ImageMagick können Sie die Größe aller PNGs im aktuellen Verzeichnis auf 200 x 200 Pixel ( -extent 200x200
) ändern, indem Sie einen weißen Hintergrund hinzufügen ( -background black
) und das Bild zentrieren ( -gravity Center
). Das -colorspace RGB
wird benötigt, um Fehler wie zu vermeiden
mogrify.im6: Ignoring incorrect gAMA value when sRGB is also present `emacs-48x48.png' @ warning/png.c/MagickPNGWarningHandler/1754.
Um sicherzustellen, dass Sie keine Bilddaten verlieren, stellen Sie sicher, dass die von Ihnen verwendete Größe größer oder so groß ist wie das größte Bild, das Sie haben. Um so schnell zu kommen, versuchen Sie:
file *png | awk -F, '{print $2}' | sort -nu
Das sollte die Größe aller sortierten Bilder drucken und Sie können leicht die größten finden.
Um Goldlöckchen (: P) zu besänftigen, können Sie den gesamten Prozess automatisieren:
dimensions=$(file *png | cut -d, -f 2 | sort -u |
awk '($1>w){w=$1}($3>h){h=$3}END{print w"x"h}') &&
mogrify -gravity Center -extent $dimensions -background white -colorspace RGB *png;
Ich nutzte die Gelegenheit, um meine Bash-Fähigkeiten zu verbessern und fand Folgendes:
#!/bin/bash
maxx=0
maxy=0
# find largest dimension
for file in *.jpg ; do
dim=$(identify "$file" | awk '{ print $3 }')
xdim=$(echo $dim | cut -f1 -dx)
ydim=$(echo $dim | cut -f2 -dx)
if [ $xdim -gt $maxx ] ; then
maxx=$xdim
fi
if [ $ydim -gt $maxy ] ; then
maxy=$ydim
fi
done
mkdir bordered
# resize and store new images in new folder
for file in *.jpg ; do
dim=$(identify "$file" | awk '{ print $3 }')
xdim=$(echo $dim | cut -f1 -dx)
ydim=$(echo $dim | cut -f2 -dx)
xborder=$(( ($maxx - $xdim ) / 2 ))
yborder=$(( ($maxy - $ydim ) / 2 ))
convert "$file" -bordercolor black -border ${xborder}x${yborder} "bordered/$file"
done
Dies sollte den Trick tun: Zuerst werden alle Dateien durchlaufen (je nach Bedarf ändern), um die größte Breite und Höhe zu ermitteln, und dann erneut Schleifen, um die erforderlichen Ränder hinzuzufügen (das -bordercolor black
Teil entsprechend Ihren Anforderungen ändern ). Die neuen Dateien werden im Ordner "bordered" gespeichert.
-border
unter "Bildoperatoren" inman convert
). Sie benötigen jedoch ein kurzes Programm, um dies zu tun, und ich werde es nicht in der Shell schreiben. Wenn Sie also bereit sind, eine Antwort in Perl mit zu akzeptierenImage::Magick
, kann ich eine bereitstellen.