Ausgabe
Ich arbeite an einem persönlichen kreativen Projekt und brauche Hilfe beim Finden oder Erstellen eines Skripts, das zufällig 4 Bilder aus 4 verschiedenen Ordnern auswählt, sie stapelt und eine Reihe von zusammengesetzten PNG-Bildern als Ausgabe erstellt. Extrapunkte, wenn die Bilder jedes Ordners einer festen Ebene zugeordnet werden können (so erscheinen zB Bilder aus dem Ordner „Hintergründe“ immer hinten). Hinweis: Ich kann nicht codieren.
Lösung
Aktualisiert
Ok, ich habe das Skript wie folgt aktualisiert:
- Es erzeugt 10 Ausgabedateien – Sie können es ändern, indem Sie NFILES am Anfang ändern
- Die Ausgabedateien überschreiben sich zwischen den Durchläufen nicht, es wird der nächste freie Name verwendet, beginnend mit
output-0.png
dannoutput-1.png
und so weiter. - Ich habe das Alpha-Compositing korrigiert, damit es zu Ihren Dateien passt.
Skript folgt…
#!/bin/bash
# Number of output files - edit freely :-)
NFILES=10
# Build arrays of filenames in each layer, assume directories are "Layer0", "Layer1" etc
IFS=$'\n' L0files=($(find "Layer 0" -name "*.png"))
IFS=$'\n' L1files=($(find "Layer 1" -name "*.png"))
IFS=$'\n' L2files=($(find "Layer 2" -name "*.png"))
IFS=$'\n' L3files=($(find "Layer 3" -name "*.png"))
# Produce NFILES output files
for i in `seq 1 $NFILES`; do
# Choose random index into each array of filenames
index0=$( jot -r 1 0 $((${#L0files[@]} - 1)) )
index1=$( jot -r 1 0 $((${#L1files[@]} - 1)) )
index2=$( jot -r 1 0 $((${#L2files[@]} - 1)) )
index3=$( jot -r 1 0 $((${#L3files[@]} - 1)) )
# Pick up files as specified by the random index
f0=${L0files[index0]}
f1=${L1files[index1]}
f2=${L2files[index2]}
f3=${L3files[index3]}
# Generate output filename, "output-nnn.png"
# ... where nnn starts at 0 and goes up till no clash
i=0
while :; do
out="output-$i.png"
[ ! -f "$out" ] && break
((i++))
done
echo $f0, $f1, $f2, $f3 "=> $out"
convert "$f0" "$f1" -composite "$f2" -composite "$f3" -composite "$out"
done
Beginnen Sie mit den folgenden Bildern in Ihren Layer[0-3]-Verzeichnissen:
Schicht 0
Schicht 1
Schicht 2
Schicht 3
Ausgabedateien wie die folgenden werden erzeugt:
Ursprüngliche Antwort
Ich würde dazu ImageMagick installieren – es ist kostenlos und einfach unter OSX zu installieren, wenn Sie es homebrew
zuerst hier installieren . Geben Sie dann im Terminal Folgendes ein.
brew install imagemagick
Das Skript sähe dann so aus:
#!/bin/bash
# Build arrays of filenames in each layer, assume directories are "Layer0", "Layer1" etc
IFS=$'\n' L0files=($(find "Layer0" -name "*.png"))
IFS=$'\n' L1files=($(find "Layer1" -name "*.png"))
IFS=$'\n' L2files=($(find "Layer2" -name "*.png"))
IFS=$'\n' L3files=($(find "Layer3" -name "*.png"))
# Choose random index into each array of filenames
index0=$( jot -r 1 0 $((${#L0files[@]} - 1)) )
index1=$( jot -r 1 0 $((${#L1files[@]} - 1)) )
index2=$( jot -r 1 0 $((${#L2files[@]} - 1)) )
index3=$( jot -r 1 0 $((${#L3files[@]} - 1)) )
# Pick up files as specified by the random index
f0=${L0files[index0]}
f1=${L1files[index1]}
f2=${L2files[index2]}
f3=${L3files[index3]}
echo Overlaying $f0, $f1, $f2, $f3 to produce "result.png"
convert "$f0" "$f1" "$f2" "$f3" -compose over -composite result.png
Sie würden also das Obige als speichern generate
und dann zum Terminal gehen und Folgendes einmal tun, um es ausführbar zu machen
chmod +x generate
Dann können Sie es ausführen, indem Sie im Finder auf das Symbol doppelklicken oder Folgendes eingeben:
./generate
im Terminal. Es erzeugt dann eine zufällige Überlagerung von 4 Bildern, eines aus jedem Ordner, und speichert das Ergebnis als result.png
.
Sie müssen die ersten 4 Zeilen bearbeiten, je nachdem, wo sich Ihre Bilder für die verschiedenen Ebenen befinden – im Grunde genommen gehe ich davon aus, dass sich die Bilder in Verzeichnissen mit dem Namen befinden Layer0-4
, aber Ihre befinden sich möglicherweise in /Users/FreddyFrog/pictures/backgrounds
oder so, in diesem Fall würden Sie sie bearbeiten
IFS=$'\n' L0files=($(find "/Users/FreddyFrog/pictures/backgrounds" -name "*.png"))
Wenn ich es ein paar Mal auf meinem Mac ausführe, erhalte ich:
Overlaying Layer0/l0-5.png, Layer1/l1-0.png, Layer2/l2-3.png, Layer3/l3-3.png to produce result.png
Overlaying Layer0/l0-3.png, Layer1/l1-4.png, Layer2/l2-3.png, Layer3/l3-3.png to produce result.png
Beantwortet von – Mark Setchell
Antwort geprüft von – Mildred Charles (FixError Admin)