我正在使用GraphicsMagick for node拍摄源图像,调整大小,裁剪然后应用遮罩:
gm(tempfile)
.quality(90)
.resize(null, 38)
.gravity('Center')
.crop(20, 34)
.mask('./public/assets/mask.png')
.write(thumb, function (err) {
if (err) throw err
console.log('success')
})
运行后,图像会调整大小并成功裁剪,但不会应用蒙版。不会抛出任何错误(即控制台打印“成功”)。
附上这也是我正在尝试使用的蒙版图像。我希望图像只能在黑色部分上绘制。我尝试过使用透明的png(gm文档说它基于alpha通道的掩码),以及黑白jpg,但结果是一样的。
我确定我错过了一些明显的东西,但我很难过谢谢!
答案 0 :(得分:7)
所以又过了一天左右,我已经弄清楚了:
面具本身没有做任何事,真的没用。如果对图像执行额外的处理/绘图,它仅使用提供的掩模图像并使用它来保护屏蔽像素免于后续更改。
由于Node GM不支持复合,我的解决方案是使用系统调用来应用掩码。因为似乎没有任何方法可以在一个步骤(graphicsmagick composite and crop in the same command)中组合裁剪和复合,所以我分两步完成:
var exec = require('child_process').exec
gm = require('gm')
gm(tempfile)
.quality(90)
.resize(null, thumbOffset)
.gravity('Center')
.crop(thumbWidth, thumbHeight)
.write(thumb, function (err) {
if (err) throw err
console.log('thumb sized')
compositeMask(thumb, mask, function(){
console.log('mask1 done')
})
})
function compositeMask(thumb, mask, next) {
var gmComposite = 'gm composite -compose in ' + thumb + ' ' + mask + ' ' + thumb
exec(gmComposite, function(err) {
if (err) throw err
pathUpdate(entryID, { thumb: thumb })
next()
})
}