好久沒發貼了,最近搗鼓了個基於node的圖片壓縮小網站解析。

来源:http://www.cnblogs.com/zoeDylan/archive/2017/04/28/node_image-compass-z-img.html
-Advertisement-
Play Games

看了下,距離上次發帖都是去年10月份的事,忙於工作的我很少跑博客園裡面來玩了。 做這個小網站的初衷是 https://tinypng.com/ 這個網站有時候訪問很慢,然後自己去研究了下圖片壓縮。 網上有看到 https://tinypng.com/ 中使用的 pngquant , 我去下載了png ...


看了下,距離上次發帖都是去年10月份的事,忙於工作的我很少跑博客園裡面來玩了。

做這個小網站的初衷是 https://tinypng.com/ 這個網站有時候訪問很慢,然後自己去研究了下圖片壓縮。

網上有看到 https://tinypng.com/ 中使用的 pngquant , 我去下載了pngquant的cli看了下,然後就開始了這個小網站的基礎。

先看看前端頁面:

這個功能還會擴建,所以現在界面只有簡潔的一部分。

現在的功能基本上只有圖片壓縮和打包下載,

 

前端頁面用到的: vue、webuploader、jq、layer、jszip

 

後端:express、co、md5、imagemin

 

才開始的時候使用的是純pngquant-lib操作,雖然成功了,但是只能壓縮png圖片,所以拋棄了,去npmjs網站看了下,最後決定壓縮直接用imagmin 前人栽樹後人乘涼嘛。

 

整個流程邏輯,簡單說就是:上傳-壓縮-打包

下麵我就分步來說說處理的內容;

1. 上傳

  這裡的上傳使用的百度webuploader插件,用習慣了。

  上傳只做的對圖片的驗證,其它的沒處理,比如文件大小什麼的,所以大文件上傳估計會有問題。

  在用戶打開頁面的時候會分配一個目錄用於保存上傳的圖片和壓縮圖片,其主要作用就是保存當前上傳信息,後期擴展會用到,現在沒什麼大用處,主要作用可以避免用戶上傳圖片不會出現衝突的情況。

 

2. 壓縮

  壓縮使用的是:imagemin 寫這個的是真大神 現在圖片外流的圖片壓縮演算法基本上都有他的影子 膜拜,不廢話了

  對imagemin進行一個簡單的包裝,方面項目內部使用

  

 

  成功壓縮後返回壓縮後的圖片大小、名稱和base64數據

 

3. 打包:使用的是jszip在前端打包,本來想在後端打包,但是考慮到性能問題,打包就交給前端了,前端也沒考慮瀏覽器相容,

  數據返回後,把接受到的數據放到zip裡面去,然後就可以等待用戶下載了。

 

遇到的問題:

1. imagemin中

imageminMozjpeg壓縮配置:{targatrue},node壓縮時居然報錯,然後跑到https://www.npmjs.com/package/imagemin-mozjpeg去看,裡面說明瞭targa通常不需要,我就呵呵了,直接幹掉

 

 

2. jszip壓縮,不需要 data:image/png;base64, 這個字元串,但是為了前端預覽壓縮後的文件,我在後端添加了這段文件頭

 開始搗鼓了半天,只知道報錯,

最後打開jszip.js裡面才看到

需要把base64頭部的文件信息去掉,然後手動解決

 

最後總算搞定了。

 

 

這個壓縮工具也算不錯,不過什麼都壓縮,但是只有圖片會進行處理,如果是其它文件它只會移動了文件而不壓縮,即便是改變尾碼也不會壓縮。

我測試了100多張jpg圖片,基本能壓縮65%左右,不過不知道什麼原因,壓縮後用qq的圖片瀏覽器看到居然有問題,其它的地方看到都沒問題

最後附上github地址:https://github.com/zoeDylan/z_img


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1..net ajax顯示後臺返回值 <script> $(document).ready(function () { $("#btn").click(function () { //var data = new string(); $.ajax({ type: "POST", //要用post方式 ...
  • 註意 轉載須保留原文鏈接(http://www.cnblogs.com/wzhiq896/p/6783296.html ) 作者:wangwen896 整理 1、分類 2、註釋方式 3、簡單指令 4、變數命名 5、NaN和isNaN 6、轉義字元 7、邏輯短路、邏輯中斷 8、優先順序 9、類型轉換(t ...
  • 最近接觸了Bootstrap,涉及到了LESS,CSS的預處理器使用最廣泛的就是LESS和Sass,都是努力把CSS武裝成為開發語言,讓它從簡單的描述性語言過渡到具有程式式特性的語言,主要的特性就是:變數、Mixins、嵌套、繼承等。就像教程里說的:CSS的預處理器就是讓CSS從設計師的工具,變為開 ...
  • 收錄待用,修改轉載已取得 "騰訊雲" 授權 作者 | 殷源 編輯 | 迷鹿 殷源,專註移動客戶端開發,微軟Imagine Cup中國區特等獎獲得者,現就職於騰訊。 接 "JavaScriptCore全面解析 (上篇)" 六、 JSExport JSExport協議提供了一種聲明式的方法去向 "Jav ...
  • 1、什麼是HTML語義化? “語義化”指的是在需要更少的人類干預的情況下,能夠研究和手機信息,讓網頁能夠被機器理解,最終讓人類受益。 語義化的目的就是讓大家直觀的認識標簽(markup)和屬性(attribute)的用途和作用。很明顯Hx系列看起來很像標題,因為擁有粗體和較大的字型大小。<strong> ...
  • 收錄待用,修改轉載已取得 "騰訊雲" 授權 作者 | 殷源 編輯 | 迷鹿 殷源,專註移動客戶端開發,微軟Imagine Cup中國區特等獎獲得者,現就職於騰訊。 JavaScript越來越多地出現在我們客戶端開發的視野中,從ReactNative到JSpatch,JavaScript與客戶端相結合 ...
  • Bootstrap是HTML、CSS 和 JS 框架,用於開發響應式佈局、移動設備優先的 WEB 項目。 可以自動適配任何設備,解決了響應式實現的繁瑣問題,可以修改其中的各種樣式,同樣,其內部功能的強大包含了整個HTML,CSS,JS的各個方面。 通過Bootstrap製作的網站,極大地節省了代碼, ...
  • 函數是JavaScript 中最有趣的部分之一。它們本質上是十分簡單和過程化的,但也可以是非常複雜和動態的。一些額外的功能可以通過使用閉包來實現。此外,由於所有的函數都是對象,所以使用函數指針非常簡單。這些令JavaScript 函數不僅有趣而且強大。以下幾節描繪了幾種在JavaScript 中使用 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...