在吾爱论坛看到有人发布了一个图形化的软件,作用是批量给照片添加一个随机的图片水印。大致背景如下:
- 例如,有1000张照片,格式包括png和jpg两种(或者更多种)。
- 有100张不同的水印图片,需要把这些水印图片随机的添加到照片上。
- 每张照片添加一张水印图片,而且水印图片需要出现在照片的不同位置上。
- 使用photoshop录制的功能无法完全满足需求。
作为一名bat脚本爱好者,我们当然要动手尝试一下啦。下载并安装 imagemagick 命令行工具,然后由简到难一步一步来。
1、给单张照片的固定位置添加一个图片水印。
magick.exe composite -gravity center "水印图片.png" "照片.jpg" "合成.jpg"
2、统计有多少张水印图片,把它们编号依次保存在指定格式的变量里面。
@echo off setlocal enabledelayedexpansion set "folderwm=c:\test\水印" set "indexwm=0" for /f "delims=" %%i in ('dir /a-d /b /s "%folderwm%\*.png"') do ( set /a indexwm+=1 set "file!indexwm!=%%i" ) set file pause
由于bat脚本里面没有数组,这个方法可以理解为把水印图片的文件名放入一个模拟数组里面。
3、把九个方位也放入一个模拟数组里面。
@echo off setlocal enabledelayedexpansion set "indexgd=0" set "listdirect=northwest north northeast west center east southwest south southeast" for %%i in (%listdirect%) do ( set /a indexgd+=1 set "position!indexgd!=%%i" ) set position pause
本例我们设置水印图片可以出现在照片的九个方位:
左上、中上、右上
左中、正中、右中
左下、中下、右下
4、完整代码
randompicturewatermark.bat
@echo offsetlocal enabledelayedexpansionrem 1、下载并安装 imagemagick 这个命令行工具rem https://imagemagick.org/script/download.php#windowsrem 2、根据自己电脑实际安装路径设置以下临时环境变量set "path=c:\program files\imagemagick;%path%" rem 设置待处理的照片所在的目录set "folderold=c:\test\照片"rem 设置水印图片所在的目录set "folderwm=c:\test\水印"rem 设置添加水印之后的照片所在的目录set "foldernew=c:\test\合成" set "indexwm=0"for /f "delims=" %%i in ('dir /a-d /b /s "%folderwm%\*.png"') do ( set /a indexwm+=1 set "file!indexwm!=%%i") set "indexgd=0"set "listdirect=northwest north northeast west center east southwest south southeast"for %%i in (%listdirect%) do ( set /a indexgd+=1 set "position!indexgd!=%%i") rem 假设待处理的照片有jpg、png两种格式,如有需要可以继续添加set "listext=jpg png"set "picturetype="for %%i in (%listext%) do ( set "picturetype=!picturetype! *.%%i") pushd "%folderold%"for /f "delims=" %%i in ('dir /b /a-d !picturetype!') do ( echo %%i set /a selectwm=!random!%%!indexwm!+1 ping -n 2 127.0.0.1 >nul set /a selectgd=!random!%%!indexgd!+1 call magick.exe composite -gravity %%position!selectgd!%% "%%file!selectwm!%%" "%%i" "%foldernew%\%%i")popdendlocal @echo off setlocal enabledelayedexpansion rem 1、下载并安装 imagemagick 这个命令行工具 rem https://imagemagick.org/script/download.php#windows rem 2、根据自己电脑实际安装路径设置以下临时环境变量 set "path=c:\program files\imagemagick;%path%" rem 设置待处理的照片所在的目录 set "folderold=c:\test\照片" rem 设置水印图片所在的目录 set "folderwm=c:\test\水印" rem 设置添加水印之后的照片所在的目录 set "foldernew=c:\test\合成" set "indexwm=0" for /f "delims=" %%i in ('dir /a-d /b /s "%folderwm%\*.png"') do ( set /a indexwm+=1 set "file!indexwm!=%%i" ) set "indexgd=0" set "listdirect=northwest north northeast west center east southwest south southeast" for %%i in (%listdirect%) do ( set /a indexgd+=1 set "position!indexgd!=%%i" ) rem 假设待处理的照片有jpg、png两种格式,如有需要可以继续添加 set "listext=jpg png" set "picturetype=" for %%i in (%listext%) do ( set "picturetype=!picturetype! *.%%i" ) pushd "%folderold%" for /f "delims=" %%i in ('dir /b /a-d !picturetype!') do ( echo %%i set /a selectwm=!random!%%!indexwm!+1 ping -n 2 127.0.0.1 >nul set /a selectgd=!random!%%!indexgd!+1 call magick.exe composite -gravity %%position!selectgd!%% "%%file!selectwm!%%" "%%i" "%foldernew%\%%i" ) popd endlocal
5、效果图
写在最后:
如果有需要让水印图片出现在照片里的位置“更加随机”的话,可以不使用那九个方位。思路是,分别计算照片和水印图片的长和宽,生成两个大小合适的随机数x和y,把这一对x,y当成水印图片左上角出现在照片里的位置坐标。有兴趣的朋友可以自行尝试。
发表评论