PNG圖片壓縮原理--屌絲的眼淚

2021-02-24 IVWEB社區
背景

今天凌晨一點,突然有個人加我的qq,一看竟然是十年前被我刪掉的初戀。。。。

因為之前在qq空間有太多的互動,所以qq推薦好友裡面經常推薦我倆互相認識。。。。謎之尷尬

同意好友申請以後,仔細看了她這十年間所有的qq動態和照片。她變美了,會打扮了,以前瘦瘦的身材配上現在的裝扮和妝容,已經是超越我認知的女神了。

而我依然碌碌無為,逐漸臃腫的身體加上日益上揚的髮際線,每天為生活操勞和奔波,還窮。

用一句話形容現在的感受就是:「妳已經登上更高的巔峰 而我只能望著妳遠去的背影」。

默默點了根煙,把她長得好看的照片都保存了下來。咦?發現每一張照片都是.png的圖片格式。png??png的圖片我們每天都在用,可是png到底是什麼,它的壓縮原理是什麼?很好,接下來我將會給大家一一闡述。

什麼是PNG

PNG的全稱叫可攜式網絡圖型(Portable Network Graphics)是目前最流行的網絡傳輸和展示的圖片格式,原因有如下幾點:

無損壓縮:PNG圖片採取了基於LZ77派生算法對文件進行壓縮,使得它壓縮比率更高,生成的文件體積更小,並且不損失數據。

體積小:它利用特殊的編碼方法標記重複出現的數據,使得同樣格式的圖片,PNG圖片文件的體積更小。網絡通訊中因受帶寬制約,在保證圖片清晰、逼真的前提下,優先選擇PNG格式的圖片。

支持透明效果:PNG支持對原圖像定義256個透明層次,使得圖像的邊緣能與任何背景平滑融合,這種功能是GIF和JPEG沒有的。

PNG類型

PNG圖片主要有三個類型,分別為 PNG 8/ PNG 24 / PNG 32。

PNG8:PNG 8中的8,其實指的是8bits,相當於用2^8(2的8次方)大小來存儲一張圖片的顏色種類,2^8等於256,也就是說PNG 8能存儲256種顏色,一張圖片如果顏色種類很少,將它設置成PNG 8得圖片類型是非常適合的。

PNG24:PNG 24中的24,相當於3乘以8 等於 24,就是用三個8bits分別去表示 R(紅)、G(綠)、B(藍)。R(0~255),G(0~255),B(0~255),可以表達256乘以256乘以256=16777216種顏色的圖片,這樣PNG 24就能比PNG 8表示色彩更豐富的圖片。但是所佔用的空間相對就更大了。

PNG32:PNG 32中的32,相當於PNG 24 加上 8bits的透明顏色通道,就相當於R(紅)、G(綠)、B(藍)、A(透明)。R(0~255),G(0~255),B(0~255),A(0~255)。比PNG 24多了一個A(透明),也就是說PNG 32能表示跟PNG 24一樣多的色彩,並且還支持256種透明的顏色,能表示更加豐富的圖片顏色類型。

怎麼說呢,總的來說,PNG 8/ PNG 24 / PNG 32就相當於我們屌絲心中,把女神分為三類:

一類女神=PNG8:屌絲舔狗們見到第一類女神,頓時會覺得心情愉悅、笑逐顏開,屌絲髮黑的印堂逐漸舒展,確認過眼神,是心動的感覺。

二類女神=PNG24:第二類女神開始厲害了,會給屌絲們一種菊花一緊、振聾發聵的心弦震撼,接觸多了第二類女神能讓屌絲每天精神抖擻,延年益壽。

三類女神=PNG32:在第三類女神面前,所有的語言都顯得蒼白無力。那是一種看了讓屌絲上下通透、手眼通天的至尊級存在。超凡脫俗、天神下凡都不足以描摹她美色的二分之一。我曾經只有在夢裡才見到過。

哎。。。我的初戀,看著她現在的照片,應該是觸及PNG 24這一等級了。

PNG圖片數據結構

PNG圖片的數據結構其實跟http請求的結構很像,都是一個數據頭,後面跟著很多的數據塊,如下圖所示:

如果你用vim的查看編碼模式打開一張png圖片,會是下面這個樣子:

握草,第一眼看到這一坨坨十六進位編碼是不是感覺和女神的心思一樣晦澀難懂?

老弟 莫慌,講實話,如果撩妹紙有那一坨坨亂碼那麼簡單,哥哥我早就妻妾成群啦。接下來我就一一講解這一堆十六進位編碼的含義。

89504e470d0a1a0a:這個是PNG圖片的頭,所有的PNG圖片的頭都是這一串編碼,圖片軟體通過這串編碼判定這個文件是不是PNG格式的圖片。

0000000d:是iHDR數據塊的長度,為13。

49484452:是數據塊的type,為IHDR,之後緊跟著是data。

000002bc:是圖片的寬度。

000003a5:是高度。

以此類推,每一段十六進位編碼就代表著一個特定的含義。下面其他的就不一一分析了,太多了,小夥伴們自己去查吧。

什麼樣的PNG圖片更適合壓縮

常規的png圖片,顏色越單一,顏色值越少,壓縮率就越大,比如下面這張圖:

它僅僅由紅色和綠色構成,如果用0代表紅色,用1代表綠色,那用數字表示這張圖就是下面這個樣子:

00000000000000000

00000000000000000

00000000000000000

1111111111111111111111111

1111111111111111111111111

1111111111111111111111111

我們可以看到,這張圖片是用了大量重複的數字,我們可以將重複的數字去掉,直接用數組形式的[0, 1]就可以直接表示出這張圖片了,僅僅用兩個數字,就能表示出一張很大的圖片,這樣就極大的壓縮了一張png圖片。

所以!顏色越單一,顏色值越少,顏色差異越小的png圖片,壓縮率就越大,體積就越小。

PNG的壓縮

PNG圖片的壓縮,分兩個階段:

預解析(Prediction)

png圖片用差分編碼(Delta encoding)對圖片進行預處理,處理每一個的像素點中每條通道的值,差分編碼主要有幾種:

不過濾

X-A

X-B

X-(A+B)/2(又稱平均值)

Paeth推斷(這種比較複雜)

假設,一張png圖片如下:

這張圖片是一個紅色逐漸增強的漸變色圖,它的紅色從左到右逐漸加強,映射成數組的值為[1,2,3,4,5,6,7,8],使用X-A的差分編碼的話,那就是:

[2-1=1, 3-2=1, 4-3=1, 5-4=1, 6-5=1, 7-6=1, 8-7=1]

得到的結果為

[1,1,1,1,1,1,1]

最後的[1,1,1,1,1,1,1]這個結果出現了大量的重複數字,這樣就非常適合進行壓縮。

這就是為什麼漸變色圖片、顏色值變化不大並且顏色單一的圖片更容易壓縮的原理。

差分編碼的目的,就是儘可能的將png圖片數據值轉換成一組重複的、低的值,這樣的值更容易被壓縮。

最後還要注意的是,差分編碼處理的是每一個的像素點中每條顏色通道的值,R(紅)、G(綠)、B(藍)、A(透明)四個顏色通道的值分別進行處理。

壓縮(Compression)

壓縮階段會將預處理階段得到的結果進行Deflate壓縮,它由 Huffman 編碼 和 LZ77壓縮構成。

如前面所說,Deflate壓縮會標記圖片所有的重複數據,並記錄數據特徵和結構,會得到一個壓縮比最大的png圖片 編碼數據。

Deflate是一種壓縮數據流的算法. 任何需要流式壓縮的地方都可以用。

還有就是我們前面說過,一個png圖片,是由很多的數據塊構成的,但是數據塊裡面的一些信息其實是沒有用的,比如用Photoshop保存了一張png圖片,圖片裡就會有一個區塊記錄「這張圖片是由photshop創建的」,很多類似這些信息都是無用的,如果用photoshop的「導出web格式」就能去掉這些無用信息。導出web格式前後對比效果如下圖所示:

可以看到,導出web格式,去除了很多無用信息後,圖片明顯小了很多。

結語

以上就是我對png的理解了,寫的不好,就像一個支離破碎的中老年,雜亂無章。

想起那年跟初戀分手的原因 是因為怕影響到學習。。。可是分開後成績也還是很爛,不僅錯過了女神,而且到現在也依然一事無成。

如今中年已至,身上背負著巨大的房貸,家裡還有嗷嗷待哺的孩子,看著身旁呼嚕聲轟天熟睡中的妻子,突然也就想開了。

就像魯迅說的:

「愛情就像在海灘上撿貝殼,不要撿最大的, 也不要撿最漂亮的,要撿就撿自己最喜歡的, 最重要的是撿到了自己喜歡的 就永遠不要再去海邊了。」

。。。。。。

凌晨四點寫完文章 不知不覺睡著了

夢回到十年前的那個夏天 我們都笑的很甜

看著你哭泣的臉 微笑著對我說再見

再見

作者的博客:https://github.com/airuikun/blog

相關焦點

  • PNG 圖片壓縮原理解析
    發現每一張照片都是.png的圖片格式。png??png的圖片我們每天都在用,可是png到底是什麼,它的壓縮原理是什麼?很好,接下來我將會給大家一一闡述。怎麼說呢,總的來說,PNG 8/ PNG 24 / PNG 32就相當於我們屌絲心中,把女神分為三類:一類女神=PNG8:屌絲舔狗們見到第一類女神,頓時會覺得心情愉悅、笑逐顏開,屌絲髮黑的印堂逐漸舒展,確認過眼神,是心動的感覺。
  • 【PNG圖片】壓縮原理解析
    發現每一張照片都是.png的圖片格式。png??png的圖片我們每天都在用,可是png到底是什麼,它的壓縮原理是什麼?很好,接下來我將會給大家一一闡述。什麼樣的PNG圖片更適合壓縮常規的png圖片,顏色越單一,顏色值越少,壓縮率就越大,比如下面這張圖:
  • Tinypng - 比ps更厲害的免費圖片壓縮神器
    提供免費的圖片壓縮功能,是目前我用的壓縮工具,圖片保真率最好,體積最小的工具。介紹一般來說,設計軟體比如PS、sketch等都有圖片壓縮導出的功能,但對於透明的png圖片,壓縮過後的圖片,仍然很大,特別是對追求前端性能的開發者來說。直到我多年前發現了這個網站,驚喜得就像進了一個世外桃源一樣,圖片幾乎看不出區別,體積能差8~10倍!
  • TinyPng-免費批量壓縮圖片的神器
    之前蝦皮路介紹了Squoosh工具,但是因為 Squoosh 只能一次壓縮一張圖片,對於有批量的圖片壓縮需求,那每次一張一張的壓縮,肯定很不爽的,畢竟需要不斷的重複操作很多次。那麼有沒有免費的批量壓縮圖片的工具呢?答案肯定是有的。
  • 《I Love Img》在線批量無損壓縮gif png jpg圖片(附視頻教程)
    在線直達地址:https://www.iloveimg.com/zh-cn/compress-imageI Love Img提供了在線批量壓縮圖片的免費服務, 它會自動根據圖片特徵自動選擇壓縮參數, 為圖片減肥的同時,又不損失畫質,是真正的傻瓜級應用。
  • WEBP是什麼圖片格式?PNG、JPG、WEBP和GIF有什麼區別
    下面,我分別對png、jpg、webp和gif圖片從像素點位數、是否支持透明通道、是有損壓縮還是無損壓縮、知否支持動態圖四個維度進行說明。PNGpng有PNG8、PNG24、PNG32三種格式。PNG8表示圖片的每個像素點是8位。PNG24表示圖片的每個像素點是24位。PNG32表示圖片的每個像素點是32位。所以,PNG32比PNG8能表示的顏色數量更多。
  • 常用的png與jpg圖片格式有什麼區別?
    png和jpg都是常用的圖片格式,其中png屬於無損壓縮,jpg是有損壓縮,使用中兩者最明顯的一個區別是png支持透明通道,jpg的圖片更適合在網絡中傳播和使用。壓縮算法其中jpg使用了有損壓縮的算法,並且壓縮比可以自定義,我們在使用Photoshop儲存jpg格式時,可以選擇圖片的儲存質量,有0~12的等級可選,其實就是自定義壓縮比,壓縮比越高,最終圖片的儲存空間越小,細節損失也越大。
  • 在線批量無損壓縮圖片,為你的圖片瘦瘦身
    同時上傳 GIF, JPG, PNG三種格式的圖片做示範壓縮的結果: 三張圖片減小了35%的體積, 但肉眼看不出畫質的損失其中的jpg圖片: 直接從184KB壓縮到68KB,但肉眼看不出畫質的改變單次批量壓縮的圖片數量未登錄用戶, 單次批量壓縮上限為15張(gif, png, jpg圖片皆可)登錄用戶(可以直接Google帳戶授權登錄),單次批量壓縮數量上限為30張(gif, png, jpg圖片皆可)
  • 常見圖片格式jpg、jpeg、png、gif等到底有什麼區別?
    Jpg圖片其實一生成出來就已經是有損的了,他是把一些不打算存儲的數據抹擦掉, 可支持有隕壓縮 不支持透明 不支持動畫 非矢量 色彩還原度比較好,可以支持適當壓縮後保持比較好的色彩度 如果你圖片顏色很多的,建議使用這個圖片格式,可以使生成的圖片大小比較小而不會使圖片看起來很模糊(失真) Jpeg格式 與jpg
  • PNG圖片網站
    ,免費下載無需註冊登陸,可以直接右鍵保存或複製;沒有明確分類,沒有PNG素材專區,但可以搜關鍵詞的時候加上png即可➌ 3pnghttp://3png.com/雖然下載素材需要登陸,但未登錄也可以直接右鍵保存圖片,網站更新較快,且素材種類很多。
  • 怎樣將png和jpg格式圖片合成gif動圖?
    jpg和png格式的圖片在日常生活中是使用廣泛的兩種圖片,那麼如果想將這兩種不同格式的靜態圖片合成一張gif動態圖片的話,該如何來進行操作呢?下面教大家使用gif合成工具,輕鬆在線合成png和jpg圖片動圖製作的方法,有需求的小夥伴一定要認真閱讀下面講述的操作步驟,一起來看一下。
  • PNG圖片怎麼轉JPG格式?批量轉換非常輕鬆!
    在我們日常娛樂和日常工作中,我們經常會拍攝照片,保存圖片之類的。JPG 和PNG格式是我們最常用到的圖片格式,有時候我們會需要將PNG格式的圖片轉換成JPG格式,如果是一張一張的轉換那也太浪費時間了,今天小編教大家幾招,如何批量將PNG轉JPG!
  • 《有趣君推薦》002—圖片壓縮利器TinyPNG
    圖片壓縮利器TinyPNG今天推薦的工具是「TinyPNG」,這是一款圖片壓縮神器,無需下載軟體,在網頁即可操作。TinyPNG是一個非常不錯的圖片壓縮工具,在保持alpha通道的情況下對PNG的壓縮可以達到1/3之內,而且用肉眼基本上分辨不出壓縮的損失。你的肉眼能發現什麼不同嗎?
  • 圖片太大怎麼壓縮變小,這幾個方法值得收藏
    我們在日常的工作中多多少少都會用到圖片,特別要注意的是,在一些網站或者是APP中上傳圖片,需要考慮圖片的大小,同時還要注重圖片的質量,一張圖片如果質量不過關,是會影響用戶的體驗的,遇到過大的圖片我們會想辦法對圖片進行壓縮,儘可能的縮小圖片的大小。
  • png轉pdf怎麼實現?png格式的圖片可以轉換成pdf嗎?
    png轉pdf怎麼實現?畢業以後,舍友小麗在一家設計公司當美工,平時需要完成各種ps、排版任務。為了保證圖片清晰度不下降,很多時候她會以png格式來保存作圖文件。前不久,小麗公司要收集、匯總職員的設計作品,要求他們以pdf文件形式,把作品發到公司郵箱。
  • 請拋棄PNG和JPG圖片:WebP才是未來
    WebP是2010年 Google 開發的一種圖片格式,它為網頁上的圖片提供了卓越的無損和有損壓縮。網站開發者們可以使用 WebP 來創建尺寸更小、細節更豐富的圖片,以此來提高網站的速度。更快的加載速度對於網站的用戶體驗和網站的營銷效果是至關重要的。
  • Windows和MAC上設計師最愛的無損圖片壓縮工具推薦,用完會上癮
    設計師最愛的在線無損圖片壓縮工具除了TinyPNG之外,還有一些比較實用的圖片批量壓縮優化工具—JPGmini、Punypng和PNGmini
  • 如何保存網頁上的gif圖和png圖片
    gif動圖和png圖片不像jpg圖片,只要右擊另存為就可以將圖片給保存下來了。剛開始喵喵還傻傻的截圖,放到ps裡面然後在保存,最悲催的是,有時候截圖就有可能把原圖給變掉了。喵喵經過摸索,終於找到一種不用這麼悲催的方法了!
  • 圖片太大無法上傳?使用PS無損壓縮,任意修改大小!
    可是在網絡世界中我們也需要擁有一個身份才行,這就需要上傳我們的身份證件,但是在上傳過程中,經常會出現這樣的問題——圖片大小超出限制,無法上傳!眾所周知,一般身份證相片上傳都是限制在2M之內,但是要保證圖片清晰度,我們拍出的照片文件總會遠遠超出這個範圍。不用擔心,我們用ps無損壓縮一下。
  • 圖片無損壓縮、放大、格式轉換,甲方發來的渣圖你到底該如何應對?
    他收藏夾裡居然沒有任何圖片處理工具要知道對於設計師來說擁有幾款趁手又好用無損壓縮放大、格式轉換的工具簡直太重要了不然渣畫質的素材怎麼搞?圖片太大佔資源也是要被祭天的好嗎?https://recompressor.com/Recompressor是一款完全不需要「動腦」的圖片壓縮工具,當我們上傳圖片後嗎,它會自動進行多種格式壓縮,對比壓縮大小會對畫質產生的影響,並以圖表的形式給出最佳的壓縮建議,設計師們再也不用苦苦的對比壓縮效果了。