Nodejs 大家有用node处理图片的吗,有好用的生成缩略图的类库推荐吗

Nodejs 大家有用node处理图片的吗,有好用的生成缩略图的类库推荐吗

找到几个类库:
1.node-qiniu
2.node-canvas
3.node-imagemagick
4.node-images
第一个比较复杂,非跨平台,后期不知道是否会维护。
第二个看文档时跨平台,应用容易,但在我的windows平台下安装报错 第三个安装成功,函数报错 events.js:72

    throw er; // Unhandled 'error' event

          ^

Error: write EOF

at errnoException (net.js:904:11)

at Object.afterWrite (net.js:720:19)  

第四个安装也报错http://cnodejs.org/topic/512b9fecdf9e9fcc580eb248#5308946b5a67a3aa093b6f8f

大家有好用的类库推荐吗?功能满足带缩略图,最好带水印


15 回复

当然可以。处理图片在Node.js中确实是一个常见的需求,尤其是在需要生成缩略图或者添加水印的情况下。以下是一些常用的Node.js库,它们可以帮助你完成这些任务:

1. sharp

sharp 是一个非常快速且功能强大的图像处理库,支持多种图像格式,并且提供了丰富的API来处理图片。

安装

npm install sharp

示例代码

const sharp = require('sharp');

// 读取图片并生成缩略图
sharp('input.jpg')
  .resize(300, 300) // 设置缩放后的宽度和高度
  .toFile('output.jpg', (err, info) => {
    if (err) {
      console.error(err);
    } else {
      console.log(info);
    }
  });

2. image-magick

imagemagick 是另一个强大的库,它提供了更复杂的图像处理功能,包括添加水印。

安装

npm install imagemagick

示例代码

const im = require('imagemagick');

im.resize({
  srcPath: 'input.jpg',
  dstPath: 'output.jpg',
  width: 300,
  height: 300
}, function(err, stdout, stderr) {
  if (err) {
    console.error(err);
  } else {
    console.log('Image resized successfully.');
  }
});

// 添加水印
im.convert([
  'input.jpg',
  '-gravity', 'center',
  '-pointsize', '30',
  '-fill', 'white',
  '-draw', 'text 0,0 "Watermark"',
  'output_with_watermark.jpg'
], function(err, stdout, stderr) {
  if (err) {
    console.error(err);
  } else {
    console.log('Watermark added successfully.');
  }
});

3. node-images

node-images 是一个轻量级的图像处理库,适合简单的操作。

安装

npm install node-images

示例代码

const images = require('images');

// 读取图片并生成缩略图
let img = images('input.jpg');
img.resize(300, 300); // 设置缩放后的宽度和高度
img.save('output.jpg');

总结

  • sharp 是一个高性能的选择,适用于大多数基本的图像处理需求。
  • imagemagick 提供了更复杂的功能,如添加水印。
  • node-images 则更适合简单的操作。

你可以根据具体的需求选择合适的库。希望这些示例能帮助你开始使用Node.js进行图像处理。


我也需要这东东,就是不知哪个好,一样有安装不上的。

这个还不错https://github.com/aheckmann/gm

 如果你项目急需用还是建议使用七牛服务

magemagick 我用的这个 项目地址 DoraCMS

推荐:node-easyimage (https://github.com/hacksparrow/node-easyimage) 理由:操作简洁、优雅。生成缩略图只需一句代码,如下: easyimg.thumbnail(<options>) - to create square thumbnails.

推三樓,gm +1

lwip,强大的原生库,用c++写的 自豪地采用 CNodeJS ionic

七牛 自豪地采用 CNodeJS ionic

GM,它包装的gm和im库速度快,历史悠久,跨平台,还有命令行,并且多数语言有适配。

node-canvas osx下配置略微繁琐,linux配置很简单

对于Node.js来说,处理图片的任务可以通过多种库来实现。基于你提供的问题,我推荐使用sharp库,它不仅高效而且易于使用,可以很好地满足生成缩略图的需求。同时,如果需要添加水印的话,可以结合其他库如gm(GraphicsMagick)来完成。

安装sharp

首先,你需要安装sharp库:

npm install sharp

示例代码:使用sharp生成缩略图

下面是一段使用sharp生成缩略图的基本代码示例:

const sharp = require('sharp');

async function createThumbnail(inputPath, outputPath, width, height) {
    await sharp(inputPath)
        .resize(width, height)
        .toFile(outputPath)
        .then(info => {
            console.log(`缩略图已生成:${outputPath}`);
        })
        .catch(err => {
            console.error(`生成缩略图失败:`, err);
        });
}

// 使用示例
createThumbnail('path/to/your/input.jpg', 'path/to/your/output.jpg', 200, 200);

添加水印

虽然sharp本身不直接支持水印功能,但你可以通过结合gm库来实现这一需求。gm库基于graphicsmagick,提供了更多的图像处理功能,包括添加文字或图片水印。

安装gm

npm install gm

示例代码:结合gm添加水印

const gm = require('gm').subClass({imageMagick: true});

function addWatermark(inputPath, outputPath, watermarkText) {
    gm(inputPath)
        .fontSize(36)
        .font('Arial')
        .fill('#fff')
        .drawText(10, 10, watermarkText, 'South_West')
        .write(outputPath, function (err) {
            if (!err) {
                console.log(`水印已添加并保存到:${outputPath}`);
            } else {
                console.error(`添加水印失败:`, err);
            }
        });
}

// 使用示例
addWatermark('path/to/your/thumbnail.jpg', 'path/to/your/watermarked.jpg', 'Sample Watermark');

上述代码展示了如何利用sharpgm两个库来生成缩略图以及添加水印。这样组合起来,你就能得到一个功能齐全的图像处理解决方案了。

回到顶部