摘要:前端一直比較喜歡壓縮圖片,但是每次都要用手拖來拖去,很累最近不忙了,擼了一段行的代碼,一個(gè)命令全自動(dòng)壓縮文件夾包含子文件夾里所有大小小于的和圖片,親測成功,再次感謝。
前端一直比較喜歡tinypng壓縮圖片,但是每次都要用手拖來拖去,很累.
最近不忙了,node擼了一段100行的代碼,一個(gè)命令全自動(dòng)壓縮文件夾(包含子文件夾)里所有大小小于5MB的jpg和png圖片,親測成功,再次感謝tinypng。
大體思路:
遞歸獲取本地文件夾里的文件
過濾文件,格式必須是.jpg .png,大小小于5MB.(文件夾遞歸)
每次只處理一個(gè)文件(可以繞過20個(gè)的數(shù)量限制)
處理返回?cái)?shù)據(jù)拿到遠(yuǎn)程優(yōu)化圖片地址
取回圖片更新本地圖片
純node實(shí)現(xiàn)不依賴任何其他代碼片段
上代碼:
const fs = require("fs"); const path = require("path"); const https = require("https"); const crypto = require("crypto"); const { URL } = require("url"); const root = "./", exts = [".jpg", ".png"], max = 5200000; // 5MB == 5242848.754299136 const options = { method: "POST", hostname: "tinypng.com", path: "/web/shrink", headers: { rejectUnauthorized: false, "Postman-Token": Date.now(), "Cache-Control": "no-cache", "Content-Type": "application/x-www-form-urlencoded", "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" } }; fileList(root); // 獲取文件列表 function fileList(folder) { fs.readdir(folder, (err, files) => { if (err) console.error(err); files.forEach(file => { fileFilter(folder + file); }); }); } // 過濾文件格式,返回所有jpg,png圖片 function fileFilter(file) { fs.stat(file, (err, stats) => { if (err) return console.error(err); if ( // 必須是文件,小于5MB,后綴 jpg||png stats.size <= max && stats.isFile() && exts.includes(path.extname(file)) ) { fileUpload(file); // console.log("可以壓縮:" + file); } if (stats.isDirectory()) fileList(file + "/"); }); } // 異步API,壓縮圖片 // {"error":"Bad request","message":"Request is invalid"} // {"input": { "size": 887, "type": "image/png" },"output": { "size": 785, "type": "image/png", "width": 81, "height": 81, "ratio": 0.885, "url": "https://tinypng.com/web/output/7aztz90nq5p9545zch8gjzqg5ubdatd6" }} function fileUpload(img) { var req = https.request(options, function(res) { res.on("data", buf => { let obj = JSON.parse(buf.toString()); if (obj.error) { console.log(`[${img}]:壓縮失??!報(bào)錯(cuò):${obj.message}`); } else { fileUpdate(img, obj); } }); }); req.write(fs.readFileSync(img), "binary"); req.on("error", e => { console.error(e); }); req.end(); } // 該方法被循環(huán)調(diào)用,請求圖片數(shù)據(jù) function fileUpdate(imgpath, obj) { let options = new URL(obj.output.url); let req = https.request(options, res => { let body = ""; res.setEncoding("binary"); res.on("data", function(data) { body += data; }); res.on("end", function() { fs.writeFile(imgpath, body, "binary", err => { if (err) return console.error(err); console.log( `[${imgpath}] 壓縮成功,原始大小-${obj.input.size},壓縮大小-${ obj.output.size },優(yōu)化比例-${obj.output.ratio}` ); }); }); }); req.on("error", e => { console.error(e); }); req.end(); }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/95897.html
摘要:文章目錄在線圖片壓縮在線壓縮最好用的切圖工具在線工具一鍵摳圖免費(fèi)字體免費(fèi)素材圖片和視頻中國風(fēng)配色網(wǎng)站免費(fèi)壁紙免費(fèi)短連接在線在線代碼編輯在線流程圖思維導(dǎo)圖在線圖片壓縮傳送門在線圖片壓縮網(wǎng)站已經(jīng)優(yōu)化超過十億張圖片,支持,,等格式的圖片的壓縮。 ...
摘要:關(guān)于這是一個(gè)基于的圖片壓縮上傳工具,壓縮過程主要通過調(diào)用提供的完成。因?yàn)槭亲烂娑?,所以很方便我們將圖片拖拽到任務(wù)托盤進(jìn)行壓縮上傳,極大地提升了前端的工作效率,可以讓我們更專注于業(yè)務(wù)開發(fā)。 地址 項(xiàng)目地址:tinypng-upload 有興趣的可以玩一玩,因?yàn)槠綍r(shí)經(jīng)常會(huì)用到圖片壓縮,上傳,如果你也覺得很繁瑣的話,這個(gè)將會(huì)解決你的痛點(diǎn)。 關(guān)于 tinypng-upload 這是一個(gè)基于 e...
摘要:本篇文章就來分享一下兩款開箱即用上手容易的圖床相冊程序和在線文件管理器目錄列表程序,由好友開發(fā)并維護(hù),非常適合個(gè)人站長用作圖床相冊和文件下載分享。雖然說現(xiàn)在照片還有文件存儲(chǔ)等都可以上傳到網(wǎng)盤中,但是國內(nèi)的網(wǎng)盤與國外的網(wǎng)盤存儲(chǔ)還有點(diǎn)不一樣。以百度網(wǎng)盤與Dropbox對比為例,百度網(wǎng)盤頂多算是一個(gè)個(gè)人用來存放私人照片和文件的網(wǎng)絡(luò)硬盤,如果用來分享的話很容易被百度限制或者取消下載。很多的個(gè)人站長為...
摘要:參考增強(qiáng)神器,文檔搜索效率何止翻倍推薦系數(shù)圖片展示快速獲取文件文件夾名稱插件來源開發(fā)者插件介紹如名,鼠標(biāo)選中文件或者文件夾,點(diǎn)擊鼠標(biāo)中鍵激活插件即可將文件文件夾名稱復(fù)制到剪切板。 ...
摘要:移動(dòng)端活動(dòng)頁面常常需要能夠分享到各種社交中,常用的有微信等。微信二維碼問題同一個(gè)頁面里要是有兩個(gè)二維碼,長按掃描總是只能掃出左側(cè)第一個(gè)二維碼。 首發(fā)于簡書博客:http://www.jianshu.com/p/e958... 2017-11-25 更新:5. 使用 Gulp 拼合圖片 1. 單個(gè)頁面內(nèi)容不能過多 設(shè)計(jì)常用尺寸:750 x 1334 / 640 x 1134,包含了手機(jī)頂...
閱讀 1164·2021-11-24 09:39
閱讀 3631·2021-09-02 15:21
閱讀 2172·2021-08-24 10:01
閱讀 733·2021-08-19 10:55
閱讀 2457·2019-08-30 15:55
閱讀 1218·2019-08-30 14:16
閱讀 3001·2019-08-29 15:17
閱讀 3242·2019-08-29 13:53