问题描述
我正在尝试使用批处理脚本和for循环命令在工作目录中查找所有jpg文件,然后使用第二个for命令循环为找到的每个jpg图像提取图像尺寸“ wxh”值并临时存储结果将生成变量fsize
,以便稍后在脚本中使用...运行imagemagick命令行时。
然后,我将使用以下命令行运行ImageMagick来优化所有jpg文件,该命令行需要先前存储在fsize
变量中的wxh。由于可能要处理多个jpg文件,因此我需要一次循环一个命令,直到最后一张图像被imagemagick处理为止。
我在弄清楚如何使循环继续进行方面遇到困难。
我能够获取每个jpg文件大小wxh并将其存储在fsize
var中,但是当所有图像完成运行后,jpg文件的图像尺寸将与原始文件不匹配...。 。脚本中肯定有一个错误,我正在努力寻找问题所在。
这是我被困住的地方。...有人看到我错过的东西吗?
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /R %%G IN (*.jpg) DO (
SET fpath=%%~fG
SET fname=%%~nG
FOR /F "TOKENS=3" %%I IN ('MAGICK identify "!fpath!"') DO (
SET fsize=%%I
IF "!fname!.jpg"=="!fname:*.png=!" (
CALL :RunMagick fpath fname fsize
GOTO END
:RunMagick
ECHO mogRIFY -monitor -path "output/!fname!" -filter Triangle -define filter:support=2 -thumbnail !fsize! -unsharp 0.25x0.08+8.3+0.045 -dither None -posterize 136 -quality 82 -define jpeg:fancy-upsampling=off -define png:compression-filter=5 -define png:compression-level=9 -define png:compression-strategy=1 -define png:exclude-chunk=all -interlace none -colorspace sRGB -format jpg "!fname!"
)
)
EXIT /B
IF "%ERRORLEVEL%"=="0" GOTO :END
ECHO.
ECHO ERROR LINE 12: && ECHO.
ECHO CHECK SCRIPT FOR ERRORS
PAUSE >NUL
EXIT
:END
ECHO.
ECHO END OF SCRIPT REACHED.
PAUSE>NUL
EXIT
解决方法
使用ImageMagick v7,您可以获取图像的尺寸并将其直接应用于同一命令内的任何操作。除了其他人提到的一些命令构造问题之外,我建议消除用于获取尺寸的“神奇识别”部分,而应将其正确地放在IM命令中...
... -thumbnail %[w]x%[h] ...
这只是将图像尺寸替换为“%[w] x%[h]”。
注意:那些转义符“%[w]”的宽度,高度等可能不适用于“ mogrify”。如果您一次在命令中一次只处理一个图像,那么应该可以使用“ magick!IMG!...”获得完全相同的结果,而无需“ mogrify”。
,所以我花了更多时间,因为使用公认的答案无法进行mogrify。在批处理脚本中也无法正常工作。
我找到了一种使用令牌来获取-thumbnail
选项的图像尺寸的方法。
这将使用FOR命令在脚本的文件夹中查找每个jpg图像,然后它将使用命令MAGICK identify
将信息输出到stdout,脚本将使用第二个FOR命令和第三个令牌捕获图像尺寸。尺寸存储在变量fsize
内。
因此,每张图像经过mogrify处理后,现在都会自动插入原始图像的尺寸尺寸。
@ECHO OFF
SETLOCAL
COLOR 0A
TITLE MOGRIFY JPG FILES FOR OPTIMAL QUALITY
PUSHD "%~dp0"
IF NOT EXIST "output" MKDIR "output"
SETLOCAL ENABLEDELAYEDEXPANSION
FOR %%G IN (*.jpg) DO (
SET "fname=%%G"
FOR /F "TOKENS=3" %%I IN ('MAGICK identify "!fname!"') DO (
SET "fsize=%%I"
CALL :RunMagick fname fsize
:RunMagick
MOGRIFY -monitor -path output/ -filter Triangle -define filter:support=2 -thumbnail "!fsize!" -unsharp 0.25x0.08+8.3+0.045 -dither None -posterize 136 -quality 82 -define jpeg:fancy-upsampling=off -define png:compression-filter=5 -define png:compression-level=9 -define png:compression-strategy=1 -define png:exclude-chunk=all -interlace none -colorspace sRGB -format jpg "*.jpg"
)
)
EXIT /B
:END
ECHO.
ECHO SCRIPT COMPLETE
PAUSE>NUL
EXIT