Nodejs 求救!利用require('fs')模块 可以更改上传图片的大小吗?如果可以,怎么处理。

Nodejs 求救!利用require(‘fs’)模块 可以更改上传图片的大小吗?如果可以,怎么处理。

12 回复

当然可以!在 Node.js 中,你可以使用 require('fs') 模块来读取和写入文件,但要调整图片的大小,通常需要结合其他库,比如 sharp 或者 imagemagick。这些库专门用于图像处理。

示例:使用 sharp 库调整图片大小

首先,你需要安装 sharp 库:

npm install sharp

接下来,你可以编写一个简单的脚本来读取图片文件,并使用 sharp 调整其大小,然后保存调整后的图片。

示例代码

const fs = require('fs');
const path = require('path');
const sharp = require('sharp');

// 图片路径
const inputImagePath = path.join(__dirname, 'input.jpg');
// 输出调整后图片的路径
const outputImagePath = path.join(__dirname, 'output.jpg');

// 使用 sharp 处理图片
sharp(inputImagePath)
  .resize(300, 200) // 设置宽度为300像素,高度为200像素
  .toFile(outputImagePath, (err, info) => {
    if (err) {
      console.error("Error occurred while resizing the image:", err);
    } else {
      console.log("Image resized successfully:", info);
    }
  });

解释

  1. 引入必要的模块:我们引入了 fs(文件系统)模块,用于文件操作,同时引入了 sharp 模块,用于图像处理。

  2. 设置输入和输出路径:定义了输入图片(inputImagePath)和输出图片(outputImagePath)的路径。

  3. 使用 sharp 调整图片大小:通过调用 sharp(inputImagePath) 创建一个处理对象,然后使用 .resize(300, 200) 方法指定新的尺寸,最后通过 .toFile() 将调整后的图片保存到指定路径。

  4. 错误处理:在 .toFile() 的回调函数中检查是否有错误发生,如果有则打印错误信息;如果没有错误,则打印成功信息和调整后的图片信息。

通过这种方式,你可以轻松地使用 Node.js 和 sharp 库来调整图片的大小。如果你需要更复杂的图像处理功能,sharp 提供了许多其他选项,如裁剪、旋转等。


更改上传图片大小?压缩?裁剪?看fs官方文档吧!

图片大小处理的话可以试试node-canvas模块

已经解决了。3Q

楼主我也遇到相同课题了 请问你是怎么解决的? 谢啦

人类已经无法阻止cnodejs被XSS了!

人类已经无法阻止cnodejs被XSS了!

请问下,能压缩大小吗???

如何解决?

var avatar = req.files.avatar; var avatar_filename = avatar.path.split(’/’).pop(); easyimg.resize({ src: avatar.path, dst: __dirname + ‘/…/…/public/avatar_72/’ + avatar_filename, width: 72, height: 72, }, function(err, stdout, stderr) { if (err) throw err; easyimg.resize({ src: avatar.path, dst: __dirname + ‘/…/…/public/avatar_288/’ + avatar_filename, width: 288, height: 288, }, function(err, stdout, stderr) { User.findByIdAndUpdate(req.user.id, { avatar: avatar_filename }, function(err, user) { //remove tmp file and old image files fs.unlink(avatar.path, function(err) { console.log(err); }) if (‘no.jpg’ != req.user.avatar) { fs.unlink(__dirname + ‘/…/…/public/avatar_72/’ + req.user.avatar, function(err) { console.log(err); }); fs.unlink(__dirname + ‘/…/…/public/avatar_288/’ + req.user.avatar, function(err) { console.log(err); }); }; render_data.user = user; res.render(‘user/profile_avatar’, render_data); }); })

调整上传图片大小

使用 require('fs') 模块本身并不能直接更改图片的大小。fs 模块主要用于文件系统操作,如读取、写入、删除文件等。要更改上传图片的大小,通常需要结合图像处理库,比如 sharpimagemagick

下面是一个使用 sharp 库来更改图片大小的示例:

  1. 首先,你需要安装 sharp

    npm install sharp
    
  2. 示例代码:

    const fs = require('fs');
    const sharp = require('sharp');
    
    async function resizeImage(inputPath, outputPath, width, height) {
      try {
        await sharp(inputPath)
          .resize(width, height)
          .toFile(outputPath);
        console.log(`Image resized and saved to ${outputPath}`);
      } catch (error) {
        console.error('Error resizing image:', error);
      }
    }
    
    // 使用函数
    resizeImage('uploads/original-image.jpg', 'uploads/resized-image.jpg', 300, 200);
    

在这个示例中:

  • inputPath 是原始图片的路径。
  • outputPath 是保存缩放后图片的目标路径。
  • widthheight 分别是目标图片的宽度和高度。

这段代码会读取 uploads/original-image.jpg 图片,并将其调整为 300x200 大小,然后保存到 uploads/resized-image.jpg

如果你需要处理上传的图片,可以在你的 Node.js 后端接收上传请求后,调用 resizeImage 函数进行图片处理。

回到顶部