Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在node.js gm库中嵌套imagemagick命令?_Javascript_Node.js_Imagemagick_Imagemagick Convert_Gm - Fatal编程技术网

Javascript 如何在node.js gm库中嵌套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(

通过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("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:)