在Windows上ImageMagick转换错误“无效的参数”

我试图从ASP.NET网站使用ImageMagick命令行工具将PDF文档转换为PNG文件。 我创build一个新的shell进程,并执行以下命令:

convert -density 96x96 "[FileNameAndPath].pdf" "[FileNameAndPath].png" 

这在使用VS的ASP.NET Develeopment Server在本地机器上testing网站时运行良好,而且手动input到shell时该命令也可以正常工作。 在ASP.NET中以编程方式创build的shell运行时,出现以下错误消息:

 Invalid Parameter - 96x96 

有人知道为什么会发生,做什么?

在通过RDP使用不同于ASP.NET进程的用户帐户login服务器的同时,我testing了该命令。 我已经在本地机器上使用了完全相同的ImageMagick和Ghostscript安装文件,并在安装过程中激活了将ImageMagick安装path添加到环境variables。 服务器还没有重新启动,因为比。

convert也是将FAT文件系统转换为NTFS的Windows可执行文件的名称。 当你不指定可执行文件的完整路径时,引用:

…系统首先搜索当前工作目录,然后搜索路径环境变量 ,从左到右检查每个目录,查找与给定的命令名称匹配的可执行文件名。

“C:\ Windows \ System32”通常出现在%PATH%变量的开头,导致Windows转换实用程序启动,如预期的那样出现“无效参数”错误。

尝试指定ImageMagick的convert.exe的完整路径,如下所示:

 "C:\Program Files\ImageMagick\convert.exe" -density 96x96 "path_and_filename.pdf" "path_and_filename.png" 

在Window中,实际上在system32中存在一个“convert.exe” – 确保你的脚本不能启动那个脚本(也许开发机器上的环境路径设置不同)。

一些更多的选项来解决这个问题:

  • 编辑你的Path系统变量,以包含imagemagick的路径,因为它的第一个内容,然后添加其余的。 这将使Windows总是找到imagemagic convert之前,发现其他转换程序。 所以像这样: C:\Program Files\ImageMagick-6.9.2-Q16;C:\Program Files\Haskell Platform\2014.2.0.0\lib\extralibs\bin;...

  • 另一个选择是在你的机器的某个地方创建一个专用文件夹,在这里你可以为这些名称冲突放置快捷方式。 然后,您要做的是将这些快捷方式重命名为有意义的名称,例如convert_image_magick ,然后将此文件夹的路径添加到系统路径中。 所以,现在当你更多地选择标签时,你将会找到你想要运行的正确的程序

是! 如果你启动一个管理员命令窗口,它默认为C:\ windows \ sytem32 \ …只要你不在该目录下,该命令将拾取ImageMagick convert.exe

我的问题是我正在使用“FORFILES”命令,这是棘手的,因为它需要使用“cmd / c”和传递转换命令与@path和@file参数,并做了一些斜杠转义…不用说这是造成我几个小时的头痛。 它甚至分析十六进制字符,就像如果你的文件路径中有组合0x00,它会认为这是一个十六进制值,并破坏你的路径。 我有一个名为C:\ImageRes3000x3000的文件路径和FORFILES字面解释,它导致了一个奇怪的路径问题。 对不起,如果这是一个长期无用的职位,但它的意思是FYI,如果有人跑过这个,也许会帮助他们。 这就是说,FORFILES和“convert.exe”是一个功能强大,简单的图像重命名行脚本组合。

这是我的完整的3行图像重命名脚本

 robocopy D:\SRC_DIR\ D:\DEST_DIR\_staging *.jpg /e /MAXAGE:2 FORFILES /PD:\DEST_DIR\_staging\ /S /M *.jpg /C "cmd /c convert.exe @path -quality 65 -resize 1500 D:\RESIZED_DIR\\@file" DEL D:\DEST_DIR\_staging\*.* /S /Q