节点gm(图形魔术)中有没有一种方法可以按形状裁剪?

时间:2016-08-30 12:35:17

标签: node.js crop mask graphicsmagick node-gm

我试图通过形状图片裁剪图片并尝试了这个

let imageDoc = gm(filePath).resize(100, 100);

imageDoc.mask(`${shapesPath}/hexagon.svg`);

它的作用就像没有做任何事情但正确调整大小。 也尝试使用png文件而不是svg,但根本没有结果,也许有一些方法来调试它,或者我做错了什么?

1 个答案:

答案 0 :(得分:2)

根据user Pirijan

  

面具并没有对它自己做任何事情,它真的没用。如果对图像执行额外的处理/绘图,它仅使用提供的掩模图像并使用它来保护屏蔽像素免于后续更改。

所以似乎.mask()只有在与另一个命令一起使用时才有用。

GraphicsMagick的文档可能非常令人困惑,我确信有多种方法可以屏蔽图像。以下是我的表现方式:

function mask(img, mask){
    gm()
    .command("composite")
    .compose("CopyOpacity")
    .in(img, mask, "-matte")
    .write(img, function(err){
        if(err){
            console.log(err)
        } else {
            console.log("Success! Image " + img + " was masked with mask " + mask);
        }
    });
}

但是,这并没有使用mask中的Alpha通道,而是使用没有Alpha通道的黑白面具。它还要求imgmask具有相同的尺寸。

它的工作原理是将mask中每个像素的值复制到img的Alpha通道。 -matte选项告诉gm在img上创建一个Alpha通道,如果它还没有。{/ p>

由于node-gm使用debug library from visionmedia,你可以通过设置环境变量DEBUG=gm来打开调试输出到控制台,就像这样(在Unix / OS X中):

DEBUG=gm node index.js

这将打印node-gm调用的确切命令。