Javascript 如何在node.js gm库中嵌套imagemagick命令?
通过gm库()在node.js中使用Imagemagick: 我可以将图片展平,如下所示:Javascript 如何在node.js gm库中嵌套imagemagick命令?,javascript,node.js,imagemagick,imagemagick-convert,gm,Javascript,Node.js,Imagemagick,Imagemagick Convert,Gm,通过gm库()在node.js中使用Imagemagick: 我可以将图片展平,如下所示: convert img1.png img2.png img3.png -flatten out.png convert img1.png \( img2.png -fill green -colorize 50% \) img3.png -flatten out.png 使用此js代码: gm().command("convert").in("img1.png").in("img2.png").in(
convert img1.png img2.png img3.png -flatten out.png
convert img1.png \( img2.png -fill green -colorize 50% \) 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 img3.png -flatten out.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% \)")
传递嵌套命令的正确方法是什么?我确实无法解决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太慢了!对于单个1024x1024图像,耗时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
GraphicsMagick与ImageMagick不同。他们很久以前就分开去了。对不起,我不知道GraphicsMagick或Node.jsthks@fmw42!我刚刚编辑了这个问题,以强调javascript的gm库实际上使用的是ImageMagic。。问题是Jimp使用每像素回调,并在每个回调中创建对象,再从tinycolor2库调用更多回调。。只需创建一个普通函数,通过复制tinycolor2和jimp的代码,在没有回调的情况下,它的速度就可以提高到0.03 sg,而不是14:)