近期在使用imagemagick处理水印,mac和linux下面都很实用,一个同事是windows系统,也需要类似功能。于是做了一个windows下面的脚本,同时学习了一下windows的bat处理脚本。(真心不好用)
大概记录一下脚本和流程:
— 脚本1:watermark.bat,负责调度和创建目录
echo off
SET IDTY="C:\Program Files\ImageMagick-7.0.5-Q16\identify.exe"
SET SOURCE_DIR="source"
SET LOGO="C:\windows.logo\logo.png"
SET TARGET_DIR="out"
%IDTY% -format "%%[fx:w] %%[fx:h]" %LOGO% > logo.txt
for /f "tokens=1,2" %%a in (logo.txt) do set lw=%%a&set lh=%%b
for /r %SOURCE_DIR% %%i in (*) do if not exist %TARGET_DIR%%%~pi mkdir %TARGET_DIR%%%~pi
for /r %SOURCE_DIR% %%i in (*) do (
call logo.bat %%i
)
— logo.bat,负责进行logo处理和输出:
SET TARGET_DIR="out"
SET IMCONV="C:\Program Files\ImageMagick-7.0.5-Q16\convert.exe"
SET IDTY="C:\Program Files\ImageMagick-7.0.5-Q16\identify.exe"
SET SOURCE_DIR="source"
SET TARGET_DIR="out"
SET LOGO="C:\Users\zhangwenhui\Desktop\windows.logo++\logo.png"
for /f "tokens=1,2" %%a in (logo.txt) do set lw=%%a&set lh=%%b
@rem echo %lw% %lh%
%IDTY% -format "%%[fx:w] %%[fx:h]" %1 > %1.txt
for /f "tokens=1,2" %%a in (%1.txt) do set w=%%a&set h=%%b
del %1.txt
set /a width=%w%*30/100
set /a height=%lh%*%width%/%lw%
@rem echo w:%w% ,width:%width%,height:%height%
composite -gravity southeast ( %LOGO% -resize %width%x%height% ) %1 %TARGET_DIR%\%~pn1.jpg
有几点注意:
1.windows的bat脚本中的%(百分号)是个坑:
case1:
set xx='asdfbc'
引用xx的时候使用%xx%
case2:
在命令行中 for /r /d %d in(*) do echo %d
在for里面使用的时候需要用%d的形式访问,然后在后续使用该变量的时候可以使用%d进行访问
case3:
在批处理脚本中的for,需要加两个百分号
for /r /d %%d in (*) do echo %%d
如果在for中再进行set xx,就基本上搞不正确了,所以使用了call来调用另外一个脚本;
2.批处理的执行顺序,在windows的bat处理的时候,感觉会类似递归的调用顺序,没有搞太明白。比如 block a中的block b,在执行的时候是block a把每个block单独输出到命令行被执行,而不是有一个解释器把整个脚本进行调度。
3.bat中有替换功能,但是好像只能针对%a%的变量,而不能针对%a这样的变量
4.imagemagick在windows上面默认不安装legacy utilities,所以convert,composite等功能都无法调用,在安装的时候需要选中;在composite的时候与mac略有不同,不需要使用转义括号。
5.目录中如果有空格,则需要使用引号给引起来;
印象笔记,让记忆永存。下载印象笔记 |
没有评论:
发表评论