GraphicsMagick用于节点未屏蔽

Pir*_*jan 0 javascript image node.js graphicsmagick

我正在使用GraphicsMagick节点来获取源图像,调整大小,裁剪然后应用掩码:

      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')
        })
Run Code Online (Sandbox Code Playgroud)

运行后,图像调整大小并成功裁剪,但不应用蒙版.不会抛出任何错误(即控制台打印"成功").

附上这也是我正在尝试使用的蒙版图像.我希望图像只能在黑色部分上绘制.我尝试过使用透明的png(gm文档说它基于alpha通道的掩码),以及黑白jpg,但结果是一样的.

样品面膜img

我确定我错过了一些明显的东西,但我很难过谢谢!

Pir*_*jan 7

所以经过另一天左右,我已经弄清楚了:

面具本身没有做任何事,真的没用.如果对图像执行附加处理/绘图,则仅采用所提供的掩模图像并使用它来写保护掩蔽像素免于随后的改变.

由于Node GM不支持复合,我的解决方案是使用系统调用应用掩码.因为似乎没有任何方法可以在一个步骤中组合裁剪和复合(在同一个命令中使用graphicsmagick复合和裁剪),所以我分两步完成:

      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()
        })
      }
Run Code Online (Sandbox Code Playgroud)