使用 Node.js 跨平台调整图像大小
-
21-12-2019 - |
题
我用node-webkit写了一个小工具。我选择 node-webkit 的原因之一是它很容易将您的应用程序分发到所有主要平台。
我现在想做的事情是调整文件存储上的一堆图像的大小。
我发现很多软件包都可以通过 ImageMagick 执行此操作。这需要用户安装 ImageMagick,这很糟糕......
使用网络服务是没有选择的。很容易就有大约 600 张图像。
如果没有解决方案,我只会在安装了 imagemagick 的情况下运行该任务。
解决方案
您可以使用画布标签来调整图像大小。
以新尺寸将图像加载到画布中:
...
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
.
其他提示
我正在开发一个没有任何运行时依赖性的图像处理模块;这意味着您的用户不需要安装ImageMagick。它仍处于早期阶段,但已经可用。
模块的一部分是用C ++编写的,因此您必须确保为您包装应用程序的每个平台上的模块生成(比告诉您的用户更好地安装ImageMagick,imho)。无论如何,Node-WebKit应用程序是分布的,所以它不应该是一个问题。但是,请注意,我尚未使用Node-Webkit进行测试,
使用此模块,调整图像大小如:image.batch().resize(200, 200).writeFile('output.jpg',function(err){
// done
});
.
更多信息在模块的 github repo 。
不隶属于 StackOverflow