Windows系统下如何随机分层叠加源图像自动生成合成图片?
需求说明
我需要从存放在不同文件夹的素材集中随机选取若干图像进行合成,之前看到的相关实现方案符合我的需求,但我使用的是Windows系统,不了解如何将Unix环境下的脚本改写为Windows可运行的BAT批处理文件,完全不清楚Unix代码中$符号的相关用法。
提前感谢各位的帮助。
更新
我已经成功调试好脚本可以正常运行,也感谢相关BAT命令教程帮我解决了批处理脚本的适配问题。
以下是最终可用的Windows BAT批处理代码:
echo OFF cls setlocal enableDelayedExpansion set /a folder1=1 for %%A in (./bg/*.png) do (set fol1[!folder1!]=%%~A set /a folder1+=1 ) set /a folder2=1 for %%B in (./frame/*.png) do (set fol2[!folder2!]=%%~B set /a folder2+=1 ) set /a folder3=1 for %%C in (./people/*.png) do (set fol3[!folder3!]=%%~C set /a folder3+=1 ) set /a folder4=1 for %%D in (./box/*.png) do (set fol4[!folder4!]=%%~D set /a folder4+=1 ) set totaloutput=10 for /l %%x in (1, 1, %totaloutput%) do ( :: 生成随机数从数组中选取素材 set /a "_rand1=(!RANDOM!* (%folder1%-1) /32768)+1" set /a "_rand2=(!RANDOM! * (%folder2%-1) /32768)+1" set /a "_rand3=(!RANDOM! * (%folder3%-1) /32768)+1" set /a "_rand4=(!RANDOM! * (%folder4%-1) /32768)+1" :: 拼接选中素材的完整路径 FOR %%A IN ("!_rand1!") DO set "file1=.\bg\!fol1[%%~A]!" FOR %%B IN ("!_rand2!") DO set "file2=.\frame\!fol2[%%~B]!" FOR %%C IN ("!_rand3!") DO set "file3=.\people\!fol3[%%~C]!" FOR %%D IN ("!_rand4!") DO set "file4=.\box\!fol4[%%~D]!" :: 按迭代序号生成输出文件名 set "fileoutput=output-%%~x.png" :: 调用ImageMagick完成多层图像合成 magick convert !file1! !file2! -composite !file3! -composite !file4! -composite !fileoutput! )
使用说明
- 提前在脚本同级目录新建
bg、frame、people、box四个文件夹,分别放入对应分类的PNG素材 - 代码中
set totaloutput=10代表生成10张合成图,可根据需要修改数值 - 运行脚本需要提前安装ImageMagick工具,确保
magick命令可正常调用 - 合成后的文件会保存在脚本同级目录,命名格式为
output-序号.png
内容的提问来源于stack exchange,提问作者mAzri
相关产品推荐
相关产品推荐

