node.js - 使用 GM() 和 NodeJS 制作马赛克图像

标签 node.js graphicsmagick node-imagemagick

我想使用 gm() 和 NodeJS 制作马赛克图像,但它似乎不适用于我的代码,我认为问题是由于图像的原始尺寸(600 * 200),我的模板比图像小......

我的结果应该是这样的:

enter image description here

我的代码:

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();
});

最佳答案

我不是通用汽车的专家,但以下是我的建议:

您可以尝试删除相对路径并使用绝对路径。另外,我不确定您是否需要在所有 .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.marginXsettings.imgSize.marginY 在图像之间创建边距。

关于node.js - 使用 GM() 和 NodeJS 制作马赛克图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26176403/

相关文章:

node.js - imagemagick 平铺图像与坐标

ImageMagick 采样因子

node.js - mongoDB:聚合 - 是否有等效于 native node.js 驱动程序的 $lookup 连接?

javascript - Node.js MySQL : Select-statement depending on query string?

javascript - 如何在 MongoDB 中找到对象数组和集合之间的交集?

imagemagick - GraphicsMagick 中的量子是什么意思

Meteor Up Docker 和 Graphicsmagick

javascript - res.json 返回无意修改的输入

java - GraphicsMagick + im4java,如何删除颜色配置文件(和其他冗余数据)

imagemagick - ImageMagick 给出 ' delegate failed ` 'uraw-batch' '