node 图片压缩,图片压缩 js
如何用Node.js压缩图片?下面这篇文章介绍了使用Node.js进行图像压缩的方法大家看看吧!
node.js速度课程简介:进入学习
一、内容简介
效果预览:
二、node压缩图片
一开始打算用TinyPNG的API实现图像压缩,但是尝试后发现压缩速度极慢,而且好像还很花钱,于是果断放弃了。请改用imagemin。
这里有个坑:因为imagemin不能直接压缩图片,所以需要依赖imagemin-jpegtran和imagemin-pngquant,但是安装imagemin-pngquant的时候不会安装。一个原因是这个库是基于一些底层语言实现的,所以不能直接安装,需要在你的电脑上安装另一个依赖的libpng。
安装libpng
直接贴一个brew安装的地址:zhuanlan.zhihu.com/p/90508170,基本上只要对他说一下knock命令就可以安装brew了。最后,我们将执行brew install libpng。libpng安装成功后,我们就可以在项目中安装imagemin-pngquant了。
代码实现压缩图片根据需求,我们肯定不希望他把图片压缩放在文件夹里。而是需要直接接收代码中的压缩内容,直接上传到七牛。那么我们就要用imagemin.buffer这个方法接收一个buffer对象,然后压缩后返回一个buffer。我们只需要把压缩的缓冲区直接上传给七头牛。就是这个想法。下面是代码实现:
//获取缓冲区
export const getBufferFromFile=(file path:string):promise buffer={
返回新承诺((解决,拒绝)={
fs.readFile(filePath,function (err: any,res: any) {
如果(!呃){
解析(分辨率)
}
})
})
}
//压缩图片,传入图片文件的路径,通过getBufferFromFile方法转换成buffer并压缩。
const imageg zip=async(loaclFile:string):promise any={
const buffer file=await getBufferFromFile(loaclFile)
let res
尝试{
RES=await image min . buffer(buffer file,{
插件:[
imageminJpegtran(),
imageminPngquant({
质量:[0.6,0.8],
}),
],
})
} catch (err) {
console.log(error ,err)
res=null
}
返回资源
}这样我们就可以轻松实现图像压缩了。现在,我们重写一下,上传到七牛:因为之前没有压缩,所以可以直接上传文件路径到七牛。压缩后我们只有buffer,需要上传buffer给七头牛:
gzipImage ? putStream : putFile,如果我们是获取到buffer就使用formUploader.putStream,否则只需要formUploader.putFile上传
export const upImageToQiniu=async(
loaclFile: string,
CB:{(RES:any):void;(arg0: any): void },
upConfig:qiniupconfig
)={
const config=new qiniu . conf . config()
const form uploader=new qi Niu . form _ up。表单上传程序(配置)
const putExtra=new qiniu.form_up。PutExtra()
const token=getToken(up config . access key,upConfig.secretKey,upConfig.scope)
让gzipImage
if (upConfig.gzip) {
gzip image=await image gzip(loaclFile)
}
//获取当前时间戳
var key=新日期()。getTime()
//上传调用方法
const uploadFnName=gzipImage?putStream : putFile
//上传内容
const uploadItem=gzipImage?buffer tostream(gzip image):loaclFile
//七头牛上传
formUploader[uploadFnName](
令牌,
钥匙,
上传项目,
多放一点,
function (respErr: any,respBody: any,respInfo: any) {
if (respErr) {
投掷响应
}
if (respInfo.statusCode===200) {
const URL=up config . domain / resp body . key
cb(网址)
}
}
)
}现在我们可以试验一下效果:
在您的计算机中选择一张png图片:
用我们的插件上传后,打开链接看看:
图片压缩成功~ ~
三、解决遗留bug
我在使用的时候发现了一个问题,就是有时候编辑器会突然卡住。后来发现原因是链接有空格的时候总会卡。之后,hover的其他内容没有回应。所以只需去掉hover的字符串空格,然后执行下面的链接获取方法:
//当前行的文本内容
const current line text=document . lineat(position)。text.replace (/\ s/g, )
四、结束
更多编程知识请访问:编程入门!以上就是如何使用Node.js压缩图片?更多方法详情请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。