我正在开发一个个人创意项目,需要帮助查找或创建一个脚本,该脚本将从4个不同的文件夹中随机选择4个图像,并将它们堆叠并创建一系列png合成图像作为输出。如果每个文件夹的图像都可以分配到固定图层(例如,来自“backgrounds”文件夹的图像将始终显示在后面),则可以获得额外的分数。 注:我不知道如何编码。如何通过随机分层来源图像自动生成合成图像?
2
A
回答
2
更新
好吧,我已经更新如下脚本:
- 它产生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
与层下面的图像以[0-3]目录:
层0
第1层
二层
三层
像下面的输出文件是p roduced:
原来的答案
我会安装ImageMagick的做到这一点 - 它是免费的,在OSX上轻松安装,如果你安装homebrew
首先要here。然后在终端中键入以下内容。
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
相关问题
- 1. Javascript:通过点击链接生成随机图像
- 2. 生成随机下降图像(xcode)
- 3. 随机图像生成器Android
- 4. 使用PHP生成随机图像
- 5. 在javascript中生成随机图像url
- 6. php从目录生成随机图像
- 7. 如何生成随机图?
- 8. 如何通过图像ID生成图像路径
- 9. 生成随机图像而不重复这些图像
- 10. 为JavaScript图像获取404错误随机图像生成器
- 11. Rmagick无源合成图像
- 12. 生成随机图
- 13. 随机图像生成器,但从来没有重复相同的图像 - Javascript
- 14. 使用随机数生成来显示来自数组列表的图像
- 15. 如何在生成图像后生成图像(Python成像,Plone 3)
- 16. 图像合成
- 17. 如何生成一个完全随机的图像?
- 18. 如何阻止我的随机图像生成器重复?
- 19. 如何在PHP中随机生成图像尺寸?
- 20. 如何使用C#代码生成随机大图像文件?
- 21. 生成图像
- 22. 图层OpenGL内容通过AVCaptureSession CVImageBufferRef来自摄像机
- 23. 开源工具通过Maven2与自动UML图生成Javadocs像ydoc
- 24. 分配动态生成图像ToggleButton.Content
- 25. 如何通过POST提交Javascript生成的位图图像?
- 26. 从SWF自动生成图像
- 27. 如何在无限时间内使用随机函数生成随机图像?
- 28. 通过随机字符生成生成随机名字太慢
- 29. asp.net随机图像源
- 30. 如何使用图像视图从图像数组中创建随机图像生成器?
你是一个像样的操作系统,如Linux或OSX?如果图像大小不同 - 重新缩放至固定大小? –
感谢您的回答。我正在使用OSX,我的源图像都是png,并且alpha通道保存在最终大小,所以不需要进行更改。最终的图像应该有4层,我有一组图像为每个单独的文件夹上的图层。 – ign