节点gm – 使用裁剪和resize导致错误

下面的代码抛出一个错误。

错误:命令失败:gm convert:几何体不包含图像(无法裁剪图像)。

var gm = require('gm'); gm('/origin.jpg') .resize(600) .write('/beforeCrop', function (err) { // beforeCrop is 600 * 450 gm('/beforeCrop') .crop(70, 70, 100, 100) .resize(50, 50) .write('/result', function (err) { if (err) throw err; }); }); 

看起来gm无法解决beforeCrop的大小。

为什么不把pipe道连接到一个stream,并在飞行中读取?

 var gm = require('gm'); gm('/origin.jpg') .resize(600) .stream(function (err,stdout,stderr) { // beforeCrop is 600 * 450 gm(stdout) // gm can read buffers ;) .crop(70, 70, 100, 100) .resize(50, 50) .write('/result', function (err) { if (err) throw err; }); }); 

在裁剪之后,我也会考虑将其pipe道连接到另一个stream:

 var gm = require('gm'); gm('/origin.jpg') .resize(600) .stream(function (err,stdout,stderr) { // beforeCrop is 600 * 450 gm(stdout) // gm can read buffers ;) .crop(70, 70, 100, 100).stream(function (err,stdout,stderr) { gm(stdout).resize(50, 50) .write('/result', function (err) { if (err) throw err; }); }); }); 

在同一条链上做这两件事情时,我遇到了一些问题。

您似乎正在读取和写入您的系统的根目录。 除非你以root / administrator身份运行,否则你没有权限去做,如果你是这样的话,你可能(当然如果这是Web服务器的一部分的话)会造成一个巨大的安全漏洞。

Interesting Posts