Kombinieren Sie Grafiken unterschiedlicher Größe mit ImageMagick

Kombinieren Sie Grafiken unterschiedlicher Größe mit ImageMagick

Ich verarbeite eine große Menge an Bildern, die eine silberfarbene Münze auf schwarzem Hintergrund zeigen. Zuerst schneide ich die Dateien zu, indem ich die Abmessungen wie folgt berechne: trimbox=$(convert $f -fuzz 35% -format "%@" info:)

Ich addiere 50 zu den ersten beiden Parametern und 25 zu den letzten beiden (damit mehr vom Originalbild sichtbar ist, als durch Trimmen erkannt wird). Ich habe es getestet, indem ich diese Offsets entfernt habe, ohne dass sich ein Unterschied ergeben hat.

convert "$f" -crop "$trimbox" +repage "$baseFilename-trimmed.jpg"

Nach dem Zuschneiden verwende ich:

    command="$baseoFilename-trimmed.jpg $baserFilename-trimmed.jpg "
    command2="+repage _MG_$first"
    convert $command -append $command2-vmerged.jpg
    convert $command +append $command2-hmerged.jpg

um die Dateien zusammenzuführen. Ich habe Varianten mit -background black oder -fill black ohne Erfolg ausprobiert.

Das dünne weiße Rechteck wird angezeigt, weil die beiden Bilder leicht unterschiedliche Größen haben.

Mir wäre es lieber, wenn die Größe identisch wäre, sodass keine Korrektur nötig wäre, aber ich würde auch einen schwarzen Balken akzeptieren.

Dateibeispiele:

Wenn man diese auf einem weißen Hintergrund betrachtet, ist natürlich nicht klar, wovon ich spreche.

Antwort1

Dieses Skript sollte tun, was Sie wollen. Es verwendet beim Zuschneiden die maximale Breite oder die maximale Höhe der Bilder.

# !/bin/bash

set -eu

gettrimbox() {
    # Some lines were based on the code of Fred Weinhaus available on http://www.fmwconcepts.com/imagemagick/autotrim/
    trimbox=$(convert "$1" -fuzz 35% -format "%@" info: | tr -cs "0-9\n" " ")
    r_w=$(echo $trimbox | cut -d\  -f1)
    r_h=$(echo $trimbox | cut -d\  -f2)
    r_xoff=$(echo $trimbox | cut -d\  -f3)
    r_yoff=$(echo $trimbox | cut -d\  -f4)
    r_xcenter=$(((r_w/2)+r_xoff))
    r_ycenter=$(((r_h/2)+r_yoff))
    r_w=$((r_w+50))
    r_h=$((r_h+50))
}

f1=$1
f2=$2
number1=$(echo "$f1" | tr -dc "0-9")

gettrimbox "$f1"
w1=$r_w; h1=$r_h
xcenter1=$r_xcenter; ycenter1=$r_ycenter

gettrimbox "$f2"
w2=$r_w; h2=$r_h
xcenter2=$r_xcenter; ycenter2=$r_ycenter

if [ $w1 -gt $w2 ]; then max_w=$w1; else max_w=$w2; fi
if [ $h1 -gt $h2 ]; then max_h=$h1; else max_h=$h2; fi

convert "$f1"[$max_w"x"$h1+$((xcenter1-(max_w/2)))+$((ycenter1-(h1/2)))] \
        "$f2"[$max_w"x"$h2+$((xcenter2-(max_w/2)))+$((ycenter2-(h2/2)))] \
        -append +repage "_MG_$number1-vmerged.jpg"

convert "$f1"[$w1"x"$max_h+$((xcenter1-(w1/2)))+$((ycenter1-(max_h/2)))] \
        "$f2"[$w2"x"$max_h+$((xcenter2-(w2/2)))+$((ycenter2-(max_h/2)))] \
        +append +repage "_MG_$number1-hmerged.jpg"

Antwort2

Ich verwende Irfanview64 statt Imagemagick

  • Es verfügt über flexible Bildgebungswerkzeuge
  • Starten Sie Thumbnails mit "T", um die Thumbnails-App zu starten
  • Sie können Ordner durchsuchen und sogar von >Bearbeiten, alle Unterordner hinzufügen< laden.
  • Optionen für Miniaturansichten sind umfangreich
  • Sie können mehrere Bilder mit Strg + Klicktaste auswählen
  • dann >Datei>Kontaktbogen erstellen) und Arraygröße x*y und Abstand dazwischen usw. usw. anpassen

Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben

verwandte Informationen