【问题标题】:GraphicsMagick for node not masking用于节点不屏蔽的 GraphicsMagick
【发布时间】:2014-01-01 06:24:44
【问题描述】:

我正在使用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,但结果是一样的。

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

【问题讨论】:

    标签: javascript image node.js graphicsmagick


    【解决方案1】:

    所以又过了一天左右,我想通了:

    面具本身不会做任何事情,它真的很没用。如果在图像上执行额外的处理/绘图,它只会获取提供的蒙版图像并使用它来写保护蒙版像素免于后续更改。

    因为 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()
            })
          }
    

    【讨论】:

    • 我知道这篇文章已经 8 年了,但我必须赞扬你的耐心。这几天我一直在为这个问题苦苦挣扎。我正在使用 Angular Electron,在 NodeJs 控制的 ipcMain 中,我使用的是 GM。我使用过掩码(掩码)、剪辑()、合成(图像、掩码),并且我尝试过绘制形状然后 compose()。但什么也没有发生。只是绝对没有。我在想,为什么在地球上,通用汽车的作者,花了这么多时间,写各种掩蔽技术的文档,而它根本不起作用?非常非常超现实:) 无论如何,我明天会尝试你的方法。 ??
    • 我刚刚发现 NodeJs 现在包含了“child_process”模块。由于安全问题,npm 版本已被隔离。 ? 我祈祷你的解决方案有效。这是最后的机会沙龙。 ?‍♀️ 不幸的是,node-canvas 似乎在 Electron 中不起作用。这对我的需求来说是一个很好的解决方案。遗憾的是,在 NodeJs 中处理图像没有现代、强大的解决方案?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 2010-12-19
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多