【问题标题】:ImageMagick batch convert all PNGs in subdirectories to JPEGsImageMagick 将子目录中的所有 PNG 批量转换为 JPEG
【发布时间】:2015-04-12 09:16:44
【问题描述】:

我有一个包含许多子文件夹的文件夹,其中包含我想要从 PNG 转换为 JPEG 的图像。

我试过了:

cd d:\images

mogrify -format jpg \*\*.png

我尝试了两个方向的斜线(我使用的是 Windows 7)。

但我只是收到invalid argument 错误。

我该怎么办?

如果可能的话,我真的最看重一个简单的示例答案,而不是指向 50 页图像 ImageMagick 文档的链接(我是新手)。

【问题讨论】:

  • 我不在电脑前,但请尝试mogrify -format jpg "*/*.png",包括双引号。
  • 谢谢,仍然得到无效参数错误:(
  • ImageMagick 不会遍历子目录。您需要遍历每个子目录。

标签: image batch-file imagemagick


【解决方案1】:

在 cmd 提示符下尝试使用以下命令:

mogrify -format jpg *.png

我浪费了几个小时尝试在批处理文件中使用 ImageMagick 转换命令,但无法让它工作

【讨论】:

    【解决方案2】:

    你总是可以执行for-loop:

    cd D:\images
    for /r /d %%a in (*) do mogrify -format jpg "%%~a\*.png"
    

    将为每个子文件夹运行命令,这样它是:

    mogrify -format jpg "D:\images\name of subfolder\*.png"
    

    这似乎符合您的要求。

    要在命令提示符中使用此代码,请将 %%a 替换为 %a

    编辑

    要按原样使用此代码,您需要将其放入批处理文件中。一个非常简单的过程是:

    1. 打开记事本或任何其他文本编辑器
    2. 将代码复制并粘贴到其中
    3. 另存为并在命名时将其命名为“something.bat”
    4. 在单击保存之前,请确保在名称下方的下拉菜单中将文件类型设置为 All Files (*.*)
    5. 只要您想执行该操作,只需找到“something.bat”或您命名的任何名称,然后双击即可运行。

    这样你就不必每次想要执行操作时都打开 cmd。

    【讨论】:

    • 谢谢,不确定我是否打算替换任何字符,但是当我复制并粘贴它时,我得到“%%a 在这个时候是意外的”。
    • 如果你在命令提示符下使用这个,那么你使用%a而不是%%a
    • 谢谢!有用。我必须添加什么才能将 jpg 质量设置为 95%?
    • 您所要做的就是修改代码的mogrify -format jpg "%%~a\*.png" 部分。我自己不使用它,所以我不能帮助你太多,但作为一个通用指针,我知道(或使用)的每个命令行工具都会提供一个帮助选项。输入mogrify -?mogrify -help,应该有一个非常简洁的解释如何使用该工具
    • 好的,谢谢,我应该可以解决了,反正 85% 的默认值可能还可以。第一个带有两个 %% 的示例不适合命令提示符,您什么时候需要使用它?
    【解决方案3】:

    ImageMagick mogrify 不会遍历目录。您必须在所需的每个目录上编写一个脚本循环。然后在循环中更改目录并为每个目录运行 mogrify -format jpg *.png。我还建议您备份目录或使用 -path 设置新的但为空的输出目录的路径。

    【讨论】:

      【解决方案4】:

      对于新手:

      从以下链接下载 ImageMagick:

      https://www.imagemagick.org/script/download.php

      然后只需在 cmd 中复制并粘贴以下命令:

      for /r /d %a in (*) do "C:\Program Files\ImageMagick-7.0.6-Q16\magick.exe" mogrify -format png "%~a\*.jpg"
      

      上面的命令对我来说很好,它将所有文件从 JPG 转换为 PNG,存在于当前目录中。

      如果你想删除所有残留的 JPG,只需点击以下命令:

      for /r %i in (*.jpg) do del "%i"
      

      【讨论】:

        【解决方案5】:

        我没有安装 Imagemagick,只安装了 IrfanView

        一个 IrfanView 解决方案例如:

        @echo off
        for /R "D:\images" %%F in (*.png) do (
            "%ProgramFiles(x86)%\IrfanView\i_view32.exe "%%~F" /convert "%%~dpnF.jpg"
        )
        

        另一个更快的 IrfanView 解决方案是:

        @echo off
        pushd "D:\images"
        for /R %%F in (.) do (
            "%ProgramFiles(x86)%\IrfanView\i_view32.exe" "%%~fF\*.png" /convert "%%~fF\*.jpg"
        )
        popd
        

        使用第二个示例,将 IrfanView 命令替换为 mogrify 命令:

        @echo off
        pushd "D:\images"
        for /R %%F in (.) do (
            "Path to mogrify\mogrify.exe" -format jpg "%%~fF\*.png"
        )
        popd
        

        要了解命令 forpushdpopd 以及 %%~F%%~dpnF%%~fF 打开命令提示窗口,执行以下命令,并阅读每个命令的输出帮助。

        • for /?
        • pushd /?
        • popd /?

        【讨论】:

        • 谢谢,我也去看看 irfanview。
        【解决方案6】:

        使用Python遍历子目录的解决方案:

        import glob,os
        paths = []
        for path, subdirs, files in os.walk("."):
            for name in files:
                if ".png" in name:
                    paths.append(os.path.join(path, name))
        
        for p in paths:
            cmd = "convert " + p + " " + p[:-4] + ".jpg"
            os.system(cmd)
            os.system("rm " + p)
        

        【讨论】:

          猜你喜欢
          • 2019-10-27
          • 2018-07-17
          • 1970-01-01
          • 2017-03-29
          • 2011-01-18
          • 2015-09-05
          • 2012-09-15
          • 2016-06-30
          • 2015-08-05
          相关资源
          最近更新 更多