Node.js 节点GM(GraphicsMagick)-基于循环的图像生成

Node.js 节点GM(GraphicsMagick)-基于循环的图像生成,node.js,loops,imagemagick,gm,Node.js,Loops,Imagemagick,Gm,在NodeJS中使用GM(GraphicsMagick),我想通过使用drawPoint等命令的循环来生成一些图像内容,以设置像素数据,但我不确定这样做的最佳实践 我用循环测试的代码可以工作,但是速度非常慢,因为每次设置像素时都会加载并保存图像 这是我的测试,它会产生随机的rgb噪声。如何临时存储通过循环设置的图像数据,然后仅在完成后保存 var fs = require('fs'); var gm = require('gm').subClass({imageMagick: true});

在NodeJS中使用GM(GraphicsMagick),我想通过使用drawPoint等命令的循环来生成一些图像内容,以设置像素数据,但我不确定这样做的最佳实践

我用循环测试的代码可以工作,但是速度非常慢,因为每次设置像素时都会加载并保存图像

这是我的测试,它会产生随机的rgb噪声。如何临时存储通过循环设置的图像数据,然后仅在完成后保存

var fs = require('fs');
var gm = require('gm').subClass({imageMagick: true});

var w = 200;
var h = 200;

gm(200, 200, '#ddff99f3').write('./Random Noise.png', function (err) {});

var row = 0;
var col = 0;

var r = 0;
var g = 0;
var b = 0;

function rgb(r, g, b){
  r = Math.floor(r);
  g = Math.floor(g);
  b = Math.floor(b);
  return ['rgb(',r,',',g,',',b,')'].join('');
}

for (row = 0; row < h; row++){
    for (col = 0; col < w; col++){

        r = Math.floor((Math.random() * 255) + 1);
        g = Math.floor((Math.random() * 255) + 1);
        b = Math.floor((Math.random() * 255) + 1);

        gm('./Random Noise.png')
        .fill(rgb(r,g,b))
        .drawPoint(col, row)
        .write('./Random Noise.png', function (err) {});
    }
}
var fs=require('fs');
var gm=require('gm')。子类({imageMagick:true});
var w=200;
var h=200;
gm(200200,#ddff99f3').write('./Random Noise.png',function(err){});
var行=0;
var-col=0;
var r=0;
var g=0;
var b=0;
函数rgb(r、g、b){
r=数学楼层(r);
g=数学楼层(g);
b=数学楼层(b);
return['rgb(',r',',',g',',',b',)'];
}
对于(行=0;行
我对node.js的gm了解不够,无法提供任何答案,因此这更像是一个开放的评论,让您走上正确的道路

  • 使用

    比您的解决方案更快,但仍然很慢,因为每个像素都需要评估

    convert -size 200x200 xc:'#ddff99f3' -fx 'rand()' 'Random Noise.png'
    
  • 首先构建光栅图像

    填充8位值的1d数组并直接导入它们要快得多。同样,您必须签出节点gm文档,以查看它们是如何导入/导出数据的

    var raster=[],
    指数=0;
    对于(行=0;行
    导入此命令的CLI命令类似于

    cat raster.dat | convert -size 200x200 -depth 8 rgb:- 'Random Noise.png'
    
    我想文档会将上述内容称为“流”和“管道”


  • 希望其他人能够提供node gm示例。

    感谢您的帮助,-fx命令似乎不可用。命令列表发布在此处:-fx是一个Imagemagick命令,在GraphicsMagick中可能不可用。我不使用GraphicsMagick,所以不能肯定,但它可能在那里列出了一个稍微不同的名称。另一种方法可能是创建背景图像,然后使用-draw(Imagemagick)在不同位置插入点列表。