使用node.js跨平台调整图像大小

时间:2014-01-09 23:16:56

标签: image node.js image-processing node-webkit

我用node-webkit编写了一个小工具。我选择node-webkit的一个原因是,您可以轻松地将应用程序分发到所有主要平台。

我现在喜欢做的事情是调整位于文件存储上的一堆图像。

我发现很多软件包通过ImageMagick来完成。这将要求用户安装ImageMagick,这很糟糕......

使用网络服务是不可取的。很容易就能有大约600张图片。

如果没有解决方案,我只会在安装了imagemagick的情况下运行该任务。

2 个答案:

答案 0 :(得分:4)

您可以使用canvas标签调整图片大小。

将图像加载到具有新大小的画布中:

...
var tempCanvas = document.createElement('canvas');
tempCanvas.width = newWidth;
tempCanvas.height = newHeight;
var ctx = tempCanvas.getContext('2d');
var img = new Image();
img.src = imageSrc;
img.onload = function () {
  ctx.drawImage(this, 0, 0);
};

从画布获取重新调整大小的图像:

...
var image = canvas.toDataURL('image/png');
image = image.replace('data:image/png;base64,', '');
var buffer = new Buffer(image, 'base64');
fs.writeFile('filename.png', buffer, function (error) {
  if (error) {
    // TODO handle error
  }
});
...

在此示例中,生成的图像将是png。您可以使用node-webkit支持的结果类型。如果您有不同的图像类型作为输入并希望以相同的类型输出,则需要添加一些将正确的mime类型设置为canvas.toDataURL的代码。

答案 1 :(得分:0)

我正在开发一个没有任何运行时依赖性的图像处理模块;这意味着您的用户不需要安装imagemagick。它还处于早期阶段,但已经可以使用了。

该模块的一部分是用C ++编写的,因此您必须确保在您打包应用程序的每个平台上npm install模块(比告诉用户预先安装imagemagick,imho更好) )。 node-webkit应用程序无论如何都是按平台分发的,所以它不应该是一个问题。但请注意,我还没有使用node-webkit测试它,

使用此模块,调整图像大小非常简单:

image.batch().resize(200, 200).writeFile('output.jpg',function(err){
    // done
});

该模块Github repo的更多信息。