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

ImageMagick batch convert all PNGs in subdirectories to JPEGs

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

我试过:

cd d:\images

mogrify -format jpg \*\*.png

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

但我只收到 invalid argument 个错误。

我该怎么办?

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

您始终可以执行 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”或任何您命名的名称,然后双击 运行。

这样您就不必在每次执行操作时都打开 cmd。

我没有安装 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 打开命令提示符 window,执行以下命令,并阅读每个命令的输出帮助。

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

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

mogrify -format jpg *.png

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

For novice:

从下面下载 ImageMagick link:

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"

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

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