0

I'm trying to crop picture by a shape picture and tried this

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

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

It acts like nothing was done but resizes correctly. Also tried using png file instead of svg, but there is no result at all, maybe there is some way to debug it, or I'm doing something wrong?

4

1 回答 1

2

根据用户 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);
        }
    });
}

但是,这不使用 alpha 通道mask而是使用没有 alpha 通道的黑白蒙版。它还要求两者imgmask具有相同的尺寸。

它通过将每个像素的值复制maskimg. 该选项告诉 gm如果还没有-mattealpha 通道,则在其上创建一个。img

由于 node-gm 使用来自 visionmedia 的调试库,您可以通过设置环境变量来打开控制台的调试输出DEBUG=gm,如下所示(在 Unix/OS X 中):

DEBUG=gm node index.js

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

于 2016-08-31T13:42:57.987 回答