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
编辑
要按原样使用此代码,您需要将其放入批处理文件中。一个非常简单的过程是:
- 打开记事本或任何其他文本编辑器
- 将代码复制并粘贴到其中
- 另存为并在命名时将其命名为“something.bat”
- 在单击保存之前,确保在名称下方的下拉菜单中将文件类型设置为
All Files (*.*)
。
- 只要您想执行操作,只需找到“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
理解命令for、pushd和popd以及%%~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)
我有一个包含许多子文件夹的文件夹,其中包含我要从 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
编辑
要按原样使用此代码,您需要将其放入批处理文件中。一个非常简单的过程是:
- 打开记事本或任何其他文本编辑器
- 将代码复制并粘贴到其中
- 另存为并在命名时将其命名为“something.bat”
- 在单击保存之前,确保在名称下方的下拉菜单中将文件类型设置为
All Files (*.*)
。 - 只要您想执行操作,只需找到“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
理解命令for、pushd和popd以及%%~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)