我用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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top