我试图通过形状图片裁剪图片并尝试了这个
let imageDoc = gm(filePath).resize(100, 100);
imageDoc.mask(`${shapesPath}/hexagon.svg`);
它的作用就像没有做任何事情但正确调整大小。 也尝试使用png文件而不是svg,但根本没有结果,也许有一些方法来调试它,或者我做错了什么?
答案 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通道的黑白面具。它还要求img
和mask
具有相同的尺寸。
它的工作原理是将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调用的确切命令。