节点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服务器的一部分的话)会造成一个巨大的安全漏洞。