更新
好的,我已经将脚本更新如下:
- 它产生 10 个输出文件 - 您可以通过在开始时更改 NFILES 来更改它
- 输出文件不会在运行之间相互覆盖,下一个空闲名称将使用以
output-0.png 开头然后output-1.png 等等。
- 我已更正 alpha 合成以匹配您的文件。
脚本如下...
#!/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