我想使用gm()和NodeJS制作马赛克图像,但似乎无法使用我的代码,我认为问题是由于图像的原始大小(600 * 200),我的模板较小比图像...
我的结果应该是这样的:
我的代码:
gm()
.in('-page', '+0+0')
.in('./public/images/instafilm.jpg') // my empty template, white and 142 * 500
.in('-page', '+10+10')
.resize(122, 122, '!')
.in('./public/images/firstimage.jpg') // 600 * 600
.in('-page', '+10+132')
.resize(122, 122, '!')
.in('./public/images/secondimage.jpg') // 600 * 600
.in('-page', '+10+164')
.resize(122, 122, '!')
.in('./public/images/thirdimage.jpg') // 600 * 600
.in('-page', '+10+296')
.resize(122, 122, '!')
.in('./public/images/fourthimage.jpg') // 600 * 600
.mosaic()
.minify()
.write(newFileName, function (err) {
if (!err) console.log('done');
if (err) console.log(err);
callback();
});
答案 0 :(得分:0)
我不是gm的专家,但这是我的建议:
您可以尝试删除相对路径并使用绝对路径。另外,我不确定你需要在所有.in('-page', '+10+xxx')
之后调整大小我认为你可能会删除所有附加的图像。
另外,我认为你不需要包装图像。它无论如何都会被创造出来。
尝试:
gm()
.in('-page', '+10+10')
.in('/usr/home/**/firstimage.jpg') // absolute path
.in('-page', '+10+132')
.in('./public/images/secondimage.jpg') //absolute path
.in('-page', '+10+164')
.in('/usr/home/**/thirdimage.jpg') //absolute path
.in('-page', '+10+296')
.in('/usr/home/**/fourthimage.jpg') //absolute path
.mosaic()
.minify()
.write(myAbsoluteFilePath, function (err) {
if (!err) console.log('done');
if (err) console.log(err);
callback();
});
如果您需要矩阵,可以使用以下内容:
var img = gm();
for(var r = 0; r < settings.canvasSize.rows; r++){
for(var c = 0; c < settings.canvasSize.cols; c++){
var y = r * settings.imgSize.height + (settings.imgSize.marginY * r);
var x = c * settings.imgSize.width + (settings.imgSize.marginX * c);
img.in('-page', '+'+x+'+'+ y).in(settings.imgSize.path);
}
}
img
.mosaic()
.write(getNewFilename(), function(err){
console.log(err);
});
我使用settings.imgSize.marginX
和settings.imgSize.marginY
在图片之间创建边距。