日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图片无损压缩

發布時間:2025/6/16 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图片无损压缩 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

所謂有圖有真相,一圖勝萬言,圖片的視覺沖擊力、說明力和感染力非常強大。由于視頻和音頻的代價更高,網站通常選用圖片配合文字說明來吸引顧客。圖片可能不是網站的核心競爭力,但卻是一個網站最最基礎的用戶體驗。除了文學、學術等極少數網站之外,幾乎所有的網站都會豐富的圖片來裝飾網頁。


對于html,js,css等文件,自身通常很小且數量有限,壓縮價值并不大,況且web服務器幾乎都有gzip壓縮功能。


因此,網站的流量絕大多數由圖片傳輸構成,從這個意義上講,通常的網站都是以圖片為主并不過分。淘寶京東這些流量巨人,主要的帶寬壓力無不來自于海量的圖片。要知道,程序本身是負責邏輯運算的,只有快慢優劣之分,并不消耗帶寬。


無損壓縮是圖片優化的重要步驟,顧名思義,就是在不改變圖片畫質的前提下進行容量壓縮,圖片更小了,傳輸量就小,從而使網頁加載速度更快,顯性的提高了帶寬的利用率,直接提升用戶體驗。一般來說,網站首頁最起碼要控制在2M的紅線以內,為了不過分簡潔,同時兼顧網站內容足夠豐富,理想的狀況是1M以內。


常見的圖片格式主要是jpeg和png,Linux下對應的無損壓縮工具是jpegoptim和optipng


jpegoptim 是一個C語言寫的無損壓縮軟件,效率比較高。我已經在生產環境使用,每天處理圖片約10G-30G,根據粗測,每秒大約能處理30張圖片,1個小時能處理大約10w張圖片,圖片優化后體積減少約10% ,經濟效益比較可觀。


直接運行命令(jpegoptim xx.jpg),如果圖片已被壓縮,則跳過,如可壓縮,則會默認覆蓋圖片源文件。

參數 -p 可以保證源文件壓縮后的屬性不變(權限、屬主和時間戳),

參數 -q 可以省略屏幕輸出,在后臺安靜壓縮。


注意:jpegoptim 在1.3.1版本之前有個bug,-p 參數僅僅保留時間戳不變,權限和屬性為600和當前操作用戶。


有一臺圖片服務器,上面都有海量的圖片,主要圖片格式都是jpg的。


由于是海量文件,第一時間想到了for循環,結果因為文件列表過于龐大,不得不放棄。


最后找到的辦法是用find + exec


1 2 3 folder=/webroot/images find?$folder/$(date?+%m%d) -type?f -iname *.jpg \ ????????-exec?/usr/sbin/jpegoptim?-q -p {} \;


這個腳本可以在晚上定期跑。也可以考慮用inotify工具做實時壓縮。


update 2014-01-15

上面的腳本是單線程的,如果一天的圖片實在是太多,可以接著考慮多線程腳本,并發壓縮,提高效率,代價是服務器較高的負載壓力,主要是CPU和IO。


假設目錄結構是按照日期分布的,如下:

1 2 3 4 5 webroot/images/2014/0115/09 webroot/images/2014/0115/10 webroot/images/2014/0115/11 webroot/images/2014/0115/12 webroot/images/2014/0115/13


那么并行腳本應該這么寫。

1 2 3 4 5 6 7 8 9 10 11 12 #!/usr/bin/env bash folder=/webroot/images if?[-d $folder/$(date?+%m%d) ];then ????for?hour?in?`ls?$folder/$(date?+%m%d)`; ????????do ????????find?$folder/$(date?+%m%d)/$hour -type?f -iname *.jpg \ ????????????-exec?/usr/sbin/jpegoptim?-q -p {} \; ????????done ????else ????????echo?$folder/$(date?+%m%d) is not exsit. ????????exit?0 fi

一天工作時間有8個小時,webroot/images/2014/0115/下至少有6-8個,多至10多個子目錄,

說實話,我還真擔心那么多線程會搞垮服務器,因為jpegoptim 確實有點耗CPU和磁盤IO,


有沒有辦法控制線程數呢?有,時間數除以線程數,取余數,

如果線程數是2,那么任意大于2的正整數除以2,余數只會是0和1

同理,如果線程數是3,那么任意大于3的正整數除以3,余數只會是0,1,2

在shell中,11取余數的辦法是 echo $((11%2))


沒空寫了,自己想吧。


update 2014-04-22


更新jpegoptim 版本為1.3.1


圖片其實沒有我們眼睛看到的那么簡單,背后還有很多文字信息,大致有:


EXIF:照片拍攝時的各種條件,比如光圈、快門、曝光度、相機品牌、拍攝時間等

IPTC:作者、版權、字幕、細節描述等

COMMENT:注釋


一般來說,這些都是附著在圖片元數據之上的信息,刪除它們并不影響圖片畫質,

“圖片瘦身”的辦法如下


1 jpegoptim -p --strip-exif --strip-iptc? --strip-com? xxx.jpg









本文轉自 紫色葡萄 51CTO博客,原文鏈接:http://blog.51cto.com/purplegrape/1283203,如需轉載請自行聯系原作者

總結

以上是生活随笔為你收集整理的图片无损压缩的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。