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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

为什么存png还有白色底_PNG的算法原理

發(fā)布時間:2023/12/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为什么存png还有白色底_PNG的算法原理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在過去的幾十年里,PNG(便攜式網(wǎng)絡圖形)已經(jīng)成為應用程序開發(fā)的主要部分。從游戲開發(fā)到web開發(fā),再到Android開發(fā),它無處不在,這意味著它被廣泛采用,但也有被廣泛濫用的機會。

正如我之前所討論的,PNG提供了一種不錯的高分辨率圖像格式,但這意味著在數(shù)據(jù)壓縮方面還有很大的改進空間。但是在我們開始討論如何進一步壓縮PNG文件之前,我們必須先討論格式是如何工作的。

了解壓縮

PNG的壓縮過程是完全無損的;這意味著壓縮文件可以準確地重建源圖像。分兩個階段完成:預測(又名過濾)和壓縮。

1 過濾器(預測)

增量編碼是最強大的數(shù)字壓縮方法之一,基本思想是您可以將任何值表示為與前一個值不同的值,所以:

[2,3,4,5,6,7,8]會變成[2,1,1,1,1,1,1],其中 [2, 3-2=1,4-3=1, 5-4=1, 6-5=1, 7-6=1, 8-7=1]

這之所以如此強大,是因為如果數(shù)據(jù)是線性相關的(也就是說,值與前一個值有一些很小的差異),那么最終會將數(shù)據(jù)集的值轉換為大量重復的小值,這些小值更容易被壓縮。 PNG格式使用稱為“filtering”的delta編碼格式。基本上,對于每一個像素掃描線,當前像素都是按照與左邊像素、上面像素和上面左側像素的某種關系進行編碼的。

例如,如果我們用A和B的平均值的差值(X-(((A + B)/2)來編碼一個給定的像素,那么我們會得到:

過濾器使用用ABC來預測x的值,使用預測值和實際值之間的差來代替X的值。

現(xiàn)在,值得注意的是,每一行只有很小的差異,PNG允許選擇五種模式中的一種,每行:

  • 不使用filtering
  • X和A的差
  • X和B的差值
  • X與(A + B)/2的差值(即平均值)
  • Paeth預測器(A,B,C的線性函數(shù))
  • 這里的意圖是,每一行都可以為自己選擇最好的filtering方法,這樣就可以產生最少的唯一符號(重復符號越多,壓縮效果越好)。這是我們每個模式的原始例子:

    需要注意的是,這些過濾器是按通道而不是按像素設置的。這意味著該過濾器應用于掃描線的一個像素的所有紅色值,然后單獨應用于掃描線的所有藍色值(盡管一行中的所有顏色將使用相同的過濾器)。

    PNG格式有一些很好的方式來選擇在一個通道上使用哪個過濾器;雖然蠻力是最直接的,但結果并不理想,相反,開發(fā)人員在不同的圖像類型上進行了試驗,并提出了一些接近最優(yōu)的經(jīng)驗法則:比如對調色板圖像以及低于8位的灰度圖像不使用過濾器;對于其他的圖像,選擇最小化絕對差和的濾波器;不是使用256模除(%),而是使用標準的帶符號數(shù)學,然后獲取abs值,并將它們全部添加到給定行中,然后比較其他篩選器類型的和,選擇給出最小和的過濾器。

    2 壓縮(DEFLATE)

    一旦在掃描線上進行了濾波,它將傳遞給LZ77算法的變種,稱為DEFLATE;該算法結合了LZ77編碼和一個霍夫曼編碼器。它與PKWARE、PKZIP、GZip等壓縮器幾乎相同。這個實現(xiàn)是開箱即用的標準,但是對于圖像數(shù)據(jù)有一些有趣的注意事項:

  • Deflate限制3到258個符號之間的匹配長度;這使得可以想象的最大壓縮比約為1032:1。
  • 如果匹配的符號小于3個,那么您將產生一些開銷(overhead)來表示符號
  • 這兩個的結果,意味著如果在掃描線中找到匹配項,圖像的大小可能會有影響。

    考慮下面這張圖,270x90版本只有20k,但是270x92版本大了2倍。

    從邏輯上看,這似乎是錯誤的。在一張圖片上增加540個像素應該不會導致2倍的壓縮膨脹。然而,當我們仔細觀察時,我們可以看到為什么會發(fā)生這種情況,下面的圖像熱圖表示給定像素的壓縮程度。深藍=高度壓縮,黃色/紅色=非高度壓縮(壓縮率不高)

    之所以發(fā)生這種情況,雖在較小的圖像中,掃描線有更多的匹配,因此有更好的壓縮率。但是,稍微調整一下大小,就會改變可能出現(xiàn)的匹配類型,一些可能的匹配對象現(xiàn)在在我們的LZ窗口之外,因此沒有被匹配,導致文件變大。

    原文鏈接 https://medium.com/@duhroach/how-png-works-f1174e3cc7b7

    總結

    以上是生活随笔為你收集整理的为什么存png还有白色底_PNG的算法原理的全部內容,希望文章能夠幫你解決所遇到的問題。

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