我正在开发个人创意项目,需要帮助查找或创建一个脚本,该脚本将从4个不同的文件夹中随机选择4个图像,堆叠它们并创建一系列png合成图像作为输出。如果可以将每个文件夹的图像分配到固定图层,则可以使用额外点(例如,“背景”文件夹中的图像将始终显示在后面)。 注意:我不知道如何编码。
答案 0 :(得分:2)
<强>更新强>
好的,我已按如下方式更新了脚本:
output-0.png
开始使用,然后output-1.png
,依此类推。脚本跟随......
#!/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
从Layer [0-3]目录中的以下图像开始:
第0层
第1层
第2层
第3层
生成如下输出文件:
原始答案
我会安装ImageMagick来执行此操作 - 如果您首先通过here安装homebrew
,它可以免费并轻松安装在OSX上。然后在终端中键入以下内容。
brew install imagemagick
该脚本将如下所示:
#!/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
因此,您可以将上述内容保存为generate
,然后转到终端并执行以下操作以使其可执行
chmod +x generate
然后您可以通过在Finder中双击其图标或键入:
来运行它./generate
终端中的然后,它将生成4个图像的随机叠加,每个文件夹一个,并将结果保存为result.png
。
您需要根据图像所在的各个层编辑前4行 - 基本上我假设图像位于名为Layer0-4
的目录中,但您的图像可能位于/Users/FreddyFrog/pictures/backgrounds
或某些人,在这种情况下你会编辑
IFS=$'\n' L0files=($(find "/Users/FreddyFrog/pictures/backgrounds" -name "*.png"))
当我在Mac上运行几次时,我得到:
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