2017-05-05 119 views
0

通过通用库(https://github.com/aheckmann/gm)在node.js中使用ImageMagick:如何在node.js gm库中嵌入imagemagick命令?

var gm = require('gm').subClass({ imageMagick: true }); 

我能够扁平化的图片,就像这样:

convert img1.png img2.png img3.png -flatten out.png 

这个JS代码:

gm().command("convert").in("img1.png").in("img2.png").in("img3.png").in("-flatten").toBuffer('PNG' ... 

但现在我想要色调其中的一个图像,如下所示:

convert img1.png \(img2.png -fill green -colorize 50% \) img3.png -flatten out.png 

,但我没有成功,我想:

.in("(img2.png -fill green -colorize 50%)") 
.in("\(img2.png -fill green -colorize 50% \)") 

什么是通过嵌套命令的正确方法?

+0

GraphicsMagick是不一样的ImageMagick。很久以前,他们分开并分开去了那里。对不起,我不知道GraphicsMagick或Node.js – fmw42

+0

thks @ fmw42!我刚刚编辑了这个问题,强调了JavaScript的gm库实际上使用了ImageMagic。 – cesarpachon

回答

0

我真的无法解决与gm的问题,据了解,检查文档和源代码,它是不可能在一步与库的当前状态。然后我找到了Jimp库:它是纯粹的JavaScript,功能更少,实现期望的行为非常简单。适用于AWS Lambda中的node.js。在一个缓冲区应用色调,然后混合一起看起来是这样的:

//each skin_buffer[attr] is a Jimp object build like this: 
    Jimp.read(data.Body, function (err, image) { 
     skin[type] = image; 
     cb(err); 
     }); 

//this is how the tint effect is applied in Jimp: 
    skin_buffers.hair.color([ 
    { apply: 'mix', params: [ '#00D', 50 ] } 
    ]); 
//.. and this is the composite step. skin is just another jimp object 
    skin.composite(skin_buffers.hair, 0, 0); 
    skin.composite(skin_buffers.legs, 0, 0); 
    skin.composite(skin_buffers.shoes, 0, 0); 
    skin.composite(skin_buffers.torso, 0, 0); 
    skin.composite(skin_buffers.edges, 0, 0); 
    skin.composite(skin_buffers.face, 0, 0); 
    skin.getBuffer(Jimp.MIME_PNG, function(err, buffer){ 
    cb(err, buffer); 
    }); 

注:jimp.mix是太慢了!对于一个单一的图像需要13秒!:

[skins_create]got all the assets! 
TIMER: got assets from s3: 3.193 sg 
[skins_create]["skin","face","hair","torso","legs","shoes","edges"] 
- SUBTIMER : jimp.mix: 13.002 
- SUBTIMER : jimp.composite hair: 0.14 
- SUBTIMER : jimp.composite legs: 0.145 
- SUBTIMER : jimp.composite shoes: 0.15 
- SUBTIMER : jimp.composite torso: 0.147 
- SUBTIMER : jimp.composite face: 0.146 
- SUBTIMER : jimp.get buffer: 0.45 
TIMER: processed buffers: 14.185 sg 
TIMER: stored in s3: 4.21 sg 
+0

我能够实现更快的版本的Jimp.mix ..问题是,Jimp使用每像素回调,并在每个回调内创建对象,再加上从tinycolor2库调用更多的回调..只是创建一个普通的函数,由复制tinycolor2和jimp的代码,没有回调,它加速到0.03 sg,而不是14个:) – cesarpachon