一个有点2的基于tinypng图片压缩服务的图片压缩工具;只支持png、JPEG格式图片
发布于 6 年前 作者 weivea 5747 次浏览 来自 分享

重要的事情说三遍 无需api key 无需api key 无需api key

https://github.com/weivea/tinypng2

稳定性依赖于当前网络环境访问 https://tinypng.com/ 的性能

勉强能用~ 不要声张~

ps: 基于网络,无网络时无法使用

require

node version >=12.4.0

Install

npm install -g @weivea/tinypng2

Usage

cd dirOfImage #进入指定目录
tinypng2 *.(png|jpeg)

use it as a module

npm install @weivea/tinypng2 --save

const tinyPng = require('@weivea/tinypng2')
const imgReadStream = fs.createReadStream(filePath)
tinyPng(imgReadStream).then((resultBuf)=>{
 // resultBuf 压缩后得图片,Buffer
})
// 用完后记得调用; tinyPng.close(), tinyPng起了一个子进程来对 tinypng网站做爬虫
tinyPng.close()

ps: 只适用于单线程调用, tinyPng不能同时发起俩, 得在then回调之后再发起下一个,如下


run(imagePaths).then(()=>{
 console.log('done')
 tinyPng.close();
}).catch((er)=>{
 console.error('run Error:', er)
 tinyPng.close();
})
async function run(filePaths) {
 const len = filePaths.length
 for (let i=0; i<len; i++) {
 const filePath = filePaths[i]
 const imgReadStream = fs.createReadStream(filePath)
 console.log('compress:', filePath)
 const resultBuf = await tinyPng(imgReadStream)
 // console.log(resultBuf)
 const pathObj = path.parse(filePath);
 pathObj.name = pathObj.name + '_tiny'
 pathObj.base = ''
 const newPath = path.format(pathObj)
 // console.log(newPath)
 const wStream = fs.createWriteStream(newPath) 
 const pass = new PassThrough()
 pass.pipe(wStream)
 pass.end(resultBuf)
 console.log('compressed:', newPath)
 }
}
1 回复
回到顶部

AltStyle によって変換されたページ (->オリジナル) /