【问题标题】:Resize Images crossplattform with node.js使用 node.js 跨平台调整图像大小
【发布时间】:2014-01-09 23:16:56
【问题描述】:

我用 node-webkit 写了一个小工具。我选择 node-webkit 的一个原因是它很容易将您的应用分发到所有主要平台。

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

我发现了很多通过 ImageMagick 执行此操作的软件包。这将要求用户安装 ImageMagick,这很糟糕......

使用网络服务是不可取的。大约有 600 张图片。

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

【问题讨论】:

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


【解决方案1】:

您可以使用 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

【讨论】:

  • 太棒了!非常感谢
  • 注意imageSrc可以是本地文件,但需要使用文件URI。例如'file://Users/me/Pictures/image.jpg'
【解决方案2】:

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

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

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

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

更多信息请访问模块的Github repo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-03
    • 2014-07-24
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 2011-10-04
    • 2013-10-16
    相关资源
    最近更新 更多