摘要:前端一直比較喜歡壓縮圖片,但是每次都要用手拖來拖去,很累最近不忙了,擼了一段行的代碼,一個命令全自動壓縮文件夾包含子文件夾里所有大小小于的和圖片,親測成功,再次感謝。
前端一直比較喜歡tinypng壓縮圖片,但是每次都要用手拖來拖去,很累.
最近不忙了,node擼了一段100行的代碼,一個命令全自動壓縮文件夾(包含子文件夾)里所有大小小于5MB的jpg和png圖片,親測成功,再次感謝tinypng。
大體思路:
遞歸獲取本地文件夾里的文件
過濾文件,格式必須是.jpg .png,大小小于5MB.(文件夾遞歸)
每次只處理一個文件(可以繞過20個的數量限制)
處理返回數據拿到遠程優化圖片地址
取回圖片更新本地圖片
純node實現不依賴任何其他代碼片段
上代碼:
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}]:壓縮失敗!報錯:${obj.message}`); } else { fileUpdate(img, obj); } }); }); req.write(fs.readFileSync(img), "binary"); req.on("error", e => { console.error(e); }); req.end(); } // 該方法被循環調用,請求圖片數據 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 },優化比例-${obj.output.ratio}` ); }); }); }); req.on("error", e => { console.error(e); }); req.end(); }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/95897.html
摘要:文章目錄在線圖片壓縮在線壓縮最好用的切圖工具在線工具一鍵摳圖免費字體免費素材圖片和視頻中國風配色網站免費壁紙免費短連接在線在線代碼編輯在線流程圖思維導圖在線圖片壓縮傳送門在線圖片壓縮網站已經優化超過十億張圖片,支持,,等格式的圖片的壓縮。 ...
摘要:關于這是一個基于的圖片壓縮上傳工具,壓縮過程主要通過調用提供的完成。因為是桌面端,所以很方便我們將圖片拖拽到任務托盤進行壓縮上傳,極大地提升了前端的工作效率,可以讓我們更專注于業務開發。 地址 項目地址:tinypng-upload 有興趣的可以玩一玩,因為平時經常會用到圖片壓縮,上傳,如果你也覺得很繁瑣的話,這個將會解決你的痛點。 關于 tinypng-upload 這是一個基于 e...
摘要:本篇文章就來分享一下兩款開箱即用上手容易的圖床相冊程序和在線文件管理器目錄列表程序,由好友開發并維護,非常適合個人站長用作圖床相冊和文件下載分享。雖然說現在照片還有文件存儲等都可以上傳到網盤中,但是國內的網盤與國外的網盤存儲還有點不一樣。以百度網盤與Dropbox對比為例,百度網盤頂多算是一個個人用來存放私人照片和文件的網絡硬盤,如果用來分享的話很容易被百度限制或者取消下載。很多的個人站長為...
摘要:參考增強神器,文檔搜索效率何止翻倍推薦系數圖片展示快速獲取文件文件夾名稱插件來源開發者插件介紹如名,鼠標選中文件或者文件夾,點擊鼠標中鍵激活插件即可將文件文件夾名稱復制到剪切板。 ...
摘要:移動端活動頁面常常需要能夠分享到各種社交中,常用的有微信等。微信二維碼問題同一個頁面里要是有兩個二維碼,長按掃描總是只能掃出左側第一個二維碼。 首發于簡書博客:http://www.jianshu.com/p/e958... 2017-11-25 更新:5. 使用 Gulp 拼合圖片 1. 單個頁面內容不能過多 設計常用尺寸:750 x 1334 / 640 x 1134,包含了手機頂...
閱讀 1123·2021-11-24 09:39
閱讀 3623·2021-09-02 15:21
閱讀 2161·2021-08-24 10:01
閱讀 722·2021-08-19 10:55
閱讀 2447·2019-08-30 15:55
閱讀 1212·2019-08-30 14:16
閱讀 2992·2019-08-29 15:17
閱讀 3235·2019-08-29 13:53