如何在Node js中将JPG图像转换为WEBP格式?

时间:2018-06-22 12:05:07

标签: node.js express multer webp

   I m trying to upload an image using reactJs and save that image in nodeJs 
   using multer middleware.This is working perfectly but now I want to 
   convert that image to webP format using webp-converter which is a small 
   node.js library for converting other image format to webp format and 
   vice- versa.   
      But I m getting this error :  

错误:命令失败:E:\ Zegal \ node_modules \ webp-converte  ib / libwebp_win64 / bin / cwebp.exe -q 80 2a3279b820cc23939eea0295228423ee--  inspironal-quote-about-life-inspiring-words.jpg -o output.webp  SHCreateStreamOnFileA(文件名,STGM_READ,流)失败80070002  打开输入文件2a3279b820cc23939eea0295228423ee时出错-鼓舞人心的  about-life-inspiring-words.jpg(80070002)  OpenInputStream(文件名,&stream)失败80070002  无法打开输入文件'2a3279b820cc23939eea0295228423ee--inspirational-quote  bout-life-inspiring-words.jpg”  错误!无法处理文件2a3279b820cc23939eea0295228423ee--inspirationa  uote-about-life-inspiring-words.jpg  错误!无法读取输入图片文件'2a3279b820cc23939eea0295228423ee--ins  引用quote-about-life-inspiring-words.jpg”

How can I solve this problem in node using multer and webp ? Is there any 
other solution for conversion ?

const multer = require('multer');
const webp = require('webp-converter');
const path = require('path');
const storage = multer.diskStorage({
destination:'./public/images',
filename(req, file, cb){
cb(null,`${file.fieldname}-${Date.now()}${path.extname(file.originalname)}`)
}

});

const upload = multer({
storage,
fileFilter:function(req, file, cb){
  checkFileType(file, cb)
}

})。single(“ image”);

checkFileType = (file, cb) => {
console.log("check file",file);
const requireMimetype = "image/jpeg";
const checkMimeType = file.mimetype == requireMimetype ? true : false;
console.log("checkMimeType",checkMimeType);
if(checkMimeType){
  webp.cwebp(file.originalname,"output.webp","-q 80",function(status){
    console.log(status);
  });
  return cb(null,true)
}else{
  cb("Error:Only jpg images are allowed.")
}

}

module.exports =上传;

2 个答案:

答案 0 :(得分:2)

我使用了一个非常出色的图像处理库sharp,该库提供的功能之一就是将图像转换为webp图像

import sharp from 'sharp';

const imageProcessing = sharp();

imageProcessing
.webp()
.pipe(someWritableStream);

答案 1 :(得分:0)

我找到一种简便的方法。

const sharp = require('sharp');


console.log(req.files.image, "form image is here"); 
console.log(req.files.image.data, "form image buffer data is here");

sharp(req.files.image.data)            
.rotate()            
.resize(200)            
.toBuffer()            
.then( newBuffer => { 

//changing the old jpg image buffer to new webp buffer
 req.files.image.data = newBuffer;

//moving the new webq image to server public folders
 req.files.image.mv(appRoot+'/uploads/images/'+ Date.now() + '.webp', function(err) {                
  if (err) {                    
     return res.status(500).send(err);                
  }
   res.status(200).json({
      message : "image uploaded successfully" 
  })
 })            
})            
.catch( err => { console.log(err) });

希望有帮助。