2011-09-13 70 views
3

我使用ImageMagick将RAW文件(* .nef扩展名)转换为JPEG图像。我实际上是从PHP内部完成这项工作的,但是没有使用IMagick扩展(我花了太多时间把我的头撞到了墙上,试图让我最终放弃工作)。相反,我使用PHP的exec()函数从命令行调用ImageMagick,只是在那里进行操作。无论如何,我写了一个简单的PHP脚本来做到这一点 - 将NEF图像转换成JPEG图像 - 它的工作原理!我通过了很多测试。当JPEG不存在时,它创建它。当JPEG已经存在时,它会覆盖它。完善!如何用ImageMagick修复此错误?

直到今天。我上周五做了这个剧本。今天(星期一),当它试图使用它时,它停止工作。我从字面上改变了没有什么,但几天之后,它没有像我周五跑过的所有相同的测试。我可以从命令行检索输出,并且这些是这次遇到的错误:

Magick: `%s' (%d) dcraw.exe -4 -w -O "C:/Windows/TEMP/magick-iDvVnHw-.ppm" "C:/Windows/TEMP/magick-hYeYwWRd" @ error/utility.c/SystemCommand/2094. 
Magick: delegate failed `dcraw.exe -4 -w -O "%u.ppm" "%i"' @ error/delegate.c/InvokeDelegate/1058. 
Magick: unable to open image `C:/Windows/TEMP/magick-iDvVnHw-.ppm': No such file or directory @ error/blob.c/OpenBlob/2588. 
Magick: missing an image filename `E:\test.jpg' @ error/convert.c/ConvertImageCommand/3015. 

这些错误在星期五没有显示。他们为什么现在出现?他们的意思是什么?我能对他们做些什么?提前致谢。

回答

0

嗯,我能解决它。我做了两件事,但我并不完全确定第一件事情有没有影响,但我会提到两个人都为挣扎着的其他人。首先,由于它似乎对临时文件有问题,因此我更改了C:\Windows\TEMP文件夹上的Windows安全性/权限,以明确允许IIS_USER完全控制以及Everyone

但其次,更重要的是,我改变了我传递给exec()的命令。以前我的命令看起来是这样的:

$cmd = 'C: & "C:\\Program Files (x86)\\ImageMagick\\convert.exe" '; 
$cmd .= '"E:\\test.nef" "E:\\test.jpg" 2>&1'; 
exec($cmd, $output, $return); 

所以不是我指定了新的“临时”目录下,并设置当前路径,像这样:

$cmd = 'SET MAGICK_TMPDIR=E:\\Temp&SET path=C:\\Program Files (x86)\\;%path%& '; 
$cmd .= '"C:\\Program Files (x86)\\ImageMagick\\convert.exe" '; 
$cmd .= '"E:\\test.nef" "E:\\test.jpg" 2>&1'; 
exec($cmd, $output, $return); 

这奏效了!脚本再次运行。

2

我对Linux的一个类似的错误:

No such file or directory @ error/blob.c/OpenBlob/2709. convert: no images defined `/tmp/transform_5c88983-1.jpg' @ error/convert.c/ConvertImageComman 

的问题是在我的德国picturename特殊字符:

images/1/14/Ministerium-für-Bildung.jpg 

我走进了文件夹,并创建无字符符号链接:

ln -s Ministerium-für-Bildung.jpg Ministerium-fr-Bildung.jpg