使用node.js调整图像大小

我用node-webkit写了一个小工具。 我selectnode-webkit的一个原因是,将应用程序分发到所有主要平台很容易。

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

我发现大量的包通过ImageMagick做到这一点。 这将需要用户安装ImageMagick,这是不好的…

使用web服务是没有select的。 可以容易地有大约600个图像。

如果没有解决scheme,我将只运行那个任务如果imagemagick安装。

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

将图像加载到具有新尺寸的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); }; 

从canvas获取resize的图像:

 ... 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支持的结果types。 如果你有不同的图像types作为input,并想输出相同的types,你需要添加一些代码,将正确的MIMEtypes设置为canvas.toDataURL

我正在开发一个没有任何运行时相关性的image processing模块; 这意味着你的用户不需要安装imagemagick。 它还处于早期阶段,但已经可以使用。

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

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

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

更多信息在模块的Github回购 。