我真的无法解决与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
GraphicsMagick是不一样的ImageMagick。很久以前,他们分开并分开去了那里。对不起,我不知道GraphicsMagick或Node.js – fmw42
thks @ fmw42!我刚刚编辑了这个问题,强调了JavaScript的gm库实际上使用了ImageMagic。 – cesarpachon