我构建了一个小脚本,首先将8个图块拼接在一起,然后将其缩小,然后必须扭曲图像。
一切都按照计划进行,直到扭曲的部分。
this.distort = function(filename) {
var distortDeferred = Q.defer();
var totalWidth = width * waves * 2,
totalHeight = height * waves * 2;
var params = [
filename,
'-matte',
'-virtual-pixel',
'transparent',
'-distort',
'Perspective "{left},{top} {newLeft},{top} {left},{bottom} {left},{bottom} {right},{bottom} {right},{bottom} {right},{top} {newRight},{top}"'.assign({
left: 0,
top: 0,
newLeft: totalWidth * distortPercentage,
bottom: totalHeight,
right: totalWidth,
newRight: totalWidth - totalWidth * distortPercentage
}),
filename
];
im.convert(params, function() {
console.log(arguments);
});
return distortDeferred.promise;
};
以下函数将给出错误:
Error: Command failed: convert: missing an image filename `tmp/5458f2e3d6840bb65ba6100f.png' @ error/convert.c/ConvertImageCommand/3184.
在命令行上运行完全相同的操作,将具有所需的输出。
我可能犯的错误以及我已经测试过:
两个图像转换,同时转换图像
所有事情都是以延迟和承诺完成的,因此两个请求同时运行是不可能的,以确保在调用扭曲函数之前设置了2000ms的超时。也没有帮助。
不存在的图片
使用fs.fileExists
对此进行了测试。结果与预期一致。
未正确设置图片的文件权限
为了安全起见,我在文件夹上尝试了chmod -R 777 folder
。结果与预期一致。
缺少ImageMagick的插件
经过一些谷歌搜索后,我遇到了一些没有安装相应插件并收到与我相同的错误的人。
显然它缺少JPEG库或PNG,see error here。
所以在运行identify -list format
之后,很明显我安装了相应的库来完成这样的操作。
概要
我认为错误也可能在节点而不是ImageMagick中找到,因为操作从命令行运行没有问题。