使用ImageMagick转换多个图像

使用ImageMagick转换多个图像,imagemagick,Imagemagick,我想使用ImageMagick将我的所有PNG转换为PNG(我需要这样做,因为AndroidStudio对原始PNG有一些问题。ImageMagick可以通过重新导出PNG来解决此问题。) 如果我这样做:convert a.png a.png 但是如何对许多文件(包括子目录中的文件)执行此操作?尝试此命令。从要转换所有图像的最顶层目录启动: find . -name "*.png" \ | while read image; do \ convert "${image}"

我想使用ImageMagick我的所有PNG转换为PNG(我需要这样做,因为AndroidStudio对原始PNG有一些问题。ImageMagick可以通过重新导出PNG来解决此问题。)

如果我这样做:
convert a.png a.png


但是如何对许多文件(包括子目录中的文件)执行此操作?

尝试此命令。从要转换所有图像的最顶层目录启动:

find . -name "*.png"     \
| while read image; do   \
     convert "${image}" "${image/.png/---repaired.png}
  done
注意事项:如果您有后缀为
.PNG
.PNG
或类似后缀的PNG文件,该命令将不适用于这些文件。对于这种情况,命令需要一些修改…

对于Windows用户--您可以在
cmd.exe
窗口中尝试此操作:

for %i in (*.png *\*.png *\*\*.png *\*\*\*.png) do (
   convert.exe %i %~pni---repaired.png
)
这将循环通过当前目录的PNG以及子目录3级中的PNG

您必须确保您的
convert.exe
确实是来自ImageMagick的文件——相应地设置环境变量
%PATH%
。否则,当命令要使用同名的磁盘格式转换
convert.exe
命令时,您可能会遇到错误

如果不确定,请使用IM
convert.exe的完整路径,例如:

D:\programs\imagemagick-install-dir\convert.exe %i %~pni---repaired.png
另外,请记住:如果将上述命令放入
*.bat
文件,则必须将每次出现的
%
加倍。因此,直接命令中的
%i
将成为批处理文件中的
%i


如果您在Vista/Windows7/2008/8(或安装了的Windows XP)上,则可以使用
for files.exe
,该文件可用于循环文件:

forfiles.exe   ^
  /p <path>    ^
  /m *.png     ^
  /s           ^
  /C "convert.exe @file @fname---repaired.png"
forfiles.exe^
/p^
/m*.png^
/^
/C“convert.exe@file@fname--repaired.png”

我创建了一个包含此命令的.bat文件,并将其放在最上面的目录中,以管理员的身份运行,但什么也没发生。我必须指定我对批不太熟悉。@AlexandruCircus:此命令不适用于
*.bat
。它适用于Linux、Unix和Mac OS X。您没有声明您在Windows上。我将在稍后或明天试一试Windows版本(我目前远离安装了ImageMagick的Windows box…。@AlexandruCircus:你试过这两个版本中的哪一个?我试过第二个版本,并且工作(针对文件)。我唯一更改的是:/c“cmd/c convert.exe@file@file”。我添加了cmd/c命令…(还覆盖了原始文件-我不需要重复)forfiles/p“pathToMyImagesDirs”/m*.png/s/c“cmd/c convert@file@file”@AlexandruCircus:我总是羞于覆盖原始文件。。。以防万一出了问题。“害羞总比抱歉好”:)如果它将多个输入图像合并到一个输出中呢?在这种情况下不能使用循环,但也不能在不进行全局搜索的情况下指定多个输入图像?