微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用for命令存储jpg图像尺寸,如何将结果存储在var中,以及如何在imagemagick命令行中使用var

如何解决如何使用for命令存储jpg图像尺寸,如何将结果存储在var中,以及如何在imagemagick命令行中使用var

我正在尝试使用批处理脚本和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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?