节点gm - 使用裁剪和调整大小会导致错误

时间:2012-09-17 08:26:37

标签: node.js resize crop graphicsmagick

以下代码会抛出错误。

  

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

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 的大小。

2 个答案:

答案 0 :(得分:4)

为什么不管道流到流中并快速读取它?

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;
    });
});

我还会考虑在裁剪之后换行到另一个流:

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;
        });
    });
});

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

答案 1 :(得分:0)

您似乎正在读取和写入系统的根目录。除非你以root身份/管理员身份运行,否则你将无法获得正确的权限,如果你这样做,你可能(当然如果这是Web服务器的一部分)会打开一个巨大的安全漏洞。 / p>