无人小站

ImageMagick 批量处理图片 (2016.10.30更新)

JP-Liu ImageMagick批处理命令行图片处理

ImageMagick 批量处理图片

很久没有写文了,这次来写一下在实习的时候遇见的一个问题,做一些社区活动的时候,合作方会提供一些图片,但是这些图片是不完整的,需要一张一张地从上到下拼接起来,提供的文件组织形式是以下的样子的:

  • 001
    • 001.jpg
    • 002.jpg
    • 003.jpg
    • 004.jpg
    • 005.jpg
  • 002
    • 001.jpg
    • 002.jpg
    • 003.jpg
    • 004.jpg
    • 005.jpg

如果只有几张的话,用 IrfanView 合并全景图(图像→创建全景图像)功能就相当方便了,但是,实际数量有接近 100 个文件夹,我去看了看 IrfanView 的命令行参数,好像没有合并拼接这个功能,于是只能转用 ImageMagick,最后把压缩,增大图片大小和缩放的功能也加上,写了一个批处理。

@echo off
set convertexe=d:\1-Program\0-CommandLineTools\ImageMagick\convert.exe
set InPutPath=d:\3-FastStone\InPut

:Menu
echo 1.横向合并图片
echo 2.纵向合并图片
echo 3.压缩图片(默认压缩率80%,不改变宽高,覆盖源文件)
echo 4.缩放图片(默认是600x400,覆盖源文件)
echo 5.增大图片(利用CMYK使图片的体积变大,覆盖源文件)
echo.&echo.
set /p choose=输入数字并按回车:
if "%choose%"=="1" set imoption=+append&Goto ProcessPicALL
if "%choose%"=="2" set imoption=-append&Goto ProcessPicALL
if "%choose%"=="3" set imoption=-quality 80&Goto ProcessPic
if "%choose%"=="4" set imoption=-resize 600x400&Goto ProcessPic
if "%choose%"=="5" set imoption=-colorspace CMYK&Goto ProcessPic

:ProcessPicALL
for /d %%d in ( %InPutPath%\* ) do (
    cd %%d
    %convertexe% %imoption% *.* all%%~nd.jpg
    pause
)
exit

:ProcessPic
for /d %%d in ( %InPutPath%\* ) do (
    cd %%d
    for %%p in (*) do %convertexe% %imoption% %%p %%~np.jpg
)
exit
JP-Liu
懒人一个