ImageMagick批量转换子目录中的所有PNG为JPEG

时间:2015-04-12 09:16:44

标签: image batch-file imagemagick

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

我试过了:

cd d:\images

mogrify -format jpg \*\*.png

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

但我只是犯了invalid argument错误。

我该怎么办?

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

6 个答案:

答案 0 :(得分:4)

尝试在cmd提示符下使用以下内容:

mogrify -format jpg * .png

我浪费时间尝试在批处理文件中使用ImageMagick转换命令,但无法使其工作

答案 1 :(得分:3)

你总是可以执行for - 循环:

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”或您命名的任何内容,然后双击即可运行。
  6. 这样,每次要执行操作时都不必打开cmd。

答案 2 :(得分:1)

我没有安装 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

要了解 推送 popd 以及%%~F%%~dpnF和{{ 1}}打开命令提示符窗口,执行以下命令,并读取每个命令的输出帮助。

  • %%~fF
  • for /?
  • pushd /?

答案 3 :(得分:1)

  

对于新手:

从下面链接下载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"

答案 4 :(得分:0)

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

答案 5 :(得分:0)

使用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)