【问题标题】:Resize GraphicsMagick image in memory调整内存中的 GraphicsMagick 图像大小
【发布时间】:2016-02-28 12:43:07
【问题描述】:

我想使用 GraphicsMagick 调整内存中图像的大小,使用 Node.js 的 gm 包。

我试过了:

const gm = require("gm");

gm("octocat.jpg").resize(240, 240).size(function (err, data) {
    console.log(err || data);
    // => { width: 896, height: 896 }
});

我假设gm 将初始文件数据存储在内存中,并准备运行gm 进程的选项。

但是如何调整内存中对象的大小并获取新缓冲区 (.toPNGBuffer) 和调整后图像的大小?

【问题讨论】:

  • 你已经通过调整大小知道了新的大小,不是吗?
  • 其实好点...结果toBuffer("PNG", fn)返回了调整大小的图像缓冲区——这是完美的。我稍后可以使用它来创建新图像:gm(pngBuffer).size(...) 将返回调整后的图像大小。您可以发布答案:) 谢谢!

标签: node.js image memory graphicsmagick


【解决方案1】:

尝试使用节点画布:https://github.com/Automattic/node-canvas

node-canvas extends the canvas API to provide interfacing with node,
for example streaming PNG data, converting to a Buffer instance, etc.

例子:

fs.readFile(__dirname + '/images/squid.png', function(err, squid){
  if (err) throw err;
  img = new Image;
  img.src = squid;
  ctx.drawImage(img, 0, 0, img.width / 4, img.height / 4);
});

此外,Canvas 比 ImageMagic 快 3 倍。

您可以尝试比较用于图像处理的 Node.js 模块 - https://github.com/ivanoff/images-manipulation-performance

author's results:
  canvas.js : 4.001 img/sec;
  gm-imagemagic.js : 1.206 img/sec;
  gm.js : 1.536 img/sec;
  lwip.js : 0.406 img/sec;

【讨论】:

    猜你喜欢
    • 2016-01-30
    • 2011-05-17
    • 2012-08-03
    • 1970-01-01
    • 2011-10-24
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    相关资源
    最近更新 更多