當前位置:首頁 » 操作系統 » 內存壓縮演算法

內存壓縮演算法

發布時間: 2023-08-05 13:41:40

Ⅰ 如何將圖片壓縮到30K以下

電腦上的畫圖就可以,步驟如下:


1、將電子版的圖片放在桌面上,滑鼠放在上面可以看見圖片大小。



Ⅱ 壓縮內存是什麼意思 壓縮了有什麼好處

摘要:介紹內存壓縮技術和一個基於硬體的內存壓縮系統模型,探討內存壓縮技術在嵌入式系統中的應用;重點介紹內存壓縮系統的硬體要求及操作系統對內存壓縮機制的支持;簡單介紹內存壓縮中常用的演算法Lempel-Ziv,並就內存壓縮技術在嵌入式系統中的應用問題作一些探討。
關鍵詞:嵌入式系統 內存壓縮 壓縮內存控制器 Lempel-Ziv演算法

1 內存壓縮技術介紹

為節省存儲空間或傳輸帶寬,人們已經在計算機系統中廣泛地使用了數據壓縮技術。在磁介質存儲數據或網路傳輸數據時,人們使用基於硬體或軟體的各種壓縮技術。當壓縮技術在各個領域都很流行時,內存壓縮技術卻由於其復雜性而一直未得到廣泛使用。近年來,由於在並行壓縮一解壓演算法以及在硅密度及速度方面取得的進展,使得內存壓縮技術變得可行。

內存壓縮技術的主要思想是將數據按照一定的演算法壓縮後存入壓縮內存中,系統從壓縮內存中找到壓縮過的數據,將其解壓後即可以供系統使用。這樣既可以增加實際可用的內存空間,又可以減少頁面置換所帶來的開銷,從而以較小的成本提高系統的整體性能。

內存壓縮機制是在系統的存儲層次中邏輯地加入一層——壓縮內存層。系統在該層中以壓縮的格式保存物理頁面,當頁面再次被系統引用時,解壓該壓縮頁後,即可使用。我們將管理這一壓縮內存層的相關硬體及軟體的集合統稱為內存壓縮系統。內存壓縮系統對於CPU、I/O設備、設備驅動以及應用軟體來說是透明的,但是操作系統必須具有管理內存大小變化以及壓縮比率變化的功能。

對於大多數的操作系統而言,要實現內存壓縮,大部分體系結構都不需要改動。在標準的操作系統中,內存都是通過固定數目的物理頁框(page frame)來描述的,由操作系統的VMM來管理。要支持內存壓縮,OS要管理的實際內存大小和頁框數目是基於內存的壓縮比率來確定的。這里的實現內存是指操作系統可的內存大小,它與物理內存的關系如下:假設PM是物理內存,RM(t)是系統在t時刻的實際內存,而CR(t)是壓縮比率,在給定時刻t可支持的最大實際內存為RM(t)=CR1(t)×PM。然而,由於應用程序的數據壓縮率是不依賴於OS而動態變化的,未壓縮的數據可能會耗盡物理內存,因此當物理內存接近耗盡時,操作系統必須採取行動來解決這個問題。

2 內存壓縮系統的硬體模型

目前由於內存壓縮的思想越來越引起人們的注意市場上也出現了一些基於軟體的內存壓縮器。這些內存壓縮器主要是通過軟體對數據進行壓縮,但由於訪問壓縮數據帶來的延遲,它在系統性能方面改進並不明顯,有些甚至降低了系統性能。本節介紹一種基於硬體的內存壓縮系統模型。

圖1是一個典型的內存壓縮系統的硬體模型,包括了壓縮內存、L3高速緩沖、壓縮內存控制器等硬體部分。

其中壓縮內存(133MHz SDRAM)包含了壓縮數據。L3高速緩沖是一個共享的、32MB、4路組相聯、可回寫的高速緩沖,每行大小為1KB,由兩倍數據率(DDR)SDRAM制定。L3高速緩沖包含了未壓縮的緩沖行,由於大部分的訪問都可以在L3高速緩沖中命中,因此它隱藏了訪問壓縮主存引起的延遲。L3高速緩沖對於存儲分級體系中的上層而言就是主存,它的操作對於其它硬體,包括處理器和I/O來說都是透明的。壓縮內存控制器是整個內存壓縮系統的控制中心,它負責數據的壓縮/解壓,監控物理內存的使用情況以及實際地址到物理地址的定址過程。

數據壓縮過程是這樣的:壓縮內存控制將1KB的高速緩沖行壓縮後寫入壓縮內存中,然後將它們從壓縮內存中讀出後解壓。其壓縮演算法就是Lempel-Ziv演算法,我們會在下一部分介紹這個演算法。壓縮機制將壓縮的數據塊以不同的長度格式存放到內存中。壓縮內存的存儲單元是一個256位元組的區域。按照壓縮比率不同,一個1KB的內存塊(正好是L3每行的大小)可以占據0~4個壓縮區域。

壓縮內存控制器必須根據長度格式的不同將系統匯流排上的實際地址翻譯成物理內存的中的物理地址。實際地址是出現在處理器外部匯流排上常規地址。篁 址用來錄十壓縮內存的256位元組區域。實際地址空間存在於L1/L2/L3高速緩沖中,用於立即訪問。而其餘的內存內容部分以壓縮形式存在於物理內存中。內存控制器通過查詢壓縮翻譯表(CTT)執行從實際地址到物理地址的翻譯,這個表被保留在物理內存的某個位置。圖2是CTT表的格式及內存控制器的定址模式。

每個1KB內存塊的實際地址映射到CTT的一項,而CTT每項共16位元組,包括四個物理區域地址,每個地址指向物理內存聽一個256位元組區域。對於少於120位的塊,如一個全為零的塊,則使用一種特殊的CTT格式,稱為通用行格式。在這種格式中,壓縮數據全部存放在CTT項中,代替了四個地址指針。因此,一個1KB的通用塊僅佔用物理內存中的16位元組,其壓縮比率達到64:1。

壓縮內存控制器中有一系列的寄存器用於監控物理內存使用。Sectors Used Register(SUR)向操作系統報告壓縮內存的使用情況。The Sectors Used Threshold Registers,SUTHR和SUTLR,用於設置內存耗盡情況的中斷入口點。SUTLR寄存器是PCI中斷電路INTA的入口,而SUTHR寄存器是NMI中斷的入口。當SUR超過了SUTLR的值,內存控制器產生一個中斷,則操作系統採取措施來阻止內存消耗。

在實際地址到物理地址的轉換中,一個有用的方法是快速頁操作。它允許控制器僅修改CTT項的四個指針,從而將4KB的頁面內容換出或清空。快速頁操作通過將與4KB頁面相關的CTT項全部修改通用行格式(即全為零),從而將這4KB頁面的內容全部清空。同樣,一對頁面可以通過交換它們相關的CTT項的區域指針來交換頁面內容。由於沒有大量的數據移動發生,快速頁面操作速度相當快。

壓縮內存控制器的壓縮/解壓功能是基於LempelZiv演算法來進行的,因此下一節將簡單介紹一下該演算法的思想。

3 內存壓縮演算法Lempel-Ziv

絕大多數的壓縮演算法,包括用得特別流行的Lempel-Ziv壓縮演算法家庭,都是基於對原子記錄(Token)字元串的完全重復檢測。這個演算法雖然不是最好的演算法,但是,Lempel-Ziv演算法強調的是演算法的簡單與取得高壓縮率的速率,因此它還是在內存壓縮中得到了廣泛的應用。

Lemple-Ziv演算法(簡稱LZ)是編碼時將一個位串分成片語,然後將數據流描述成一系列的對。每個對組成一個新的片語,它包含一個數字(前一個片語的標識)和一個位(被附加到前一個片語上)。這種編碼方式很龐大,可是一旦應用到適合的字元串,它就是相當有效率的編碼方式。下面舉例說明這種演算法是如何編碼的。

++表示連接(010++1=0101),U=0010001101是未被壓縮的字元串。C是壓縮後的字元串。P(x)表示片語數x。先看一下U=0010001101發現,它可以被寫為U=0++010001101,因此得到P(1)=P(0)++0。現在繼續將其寫為U=0++02++0001101,可得到P(2)=P(1)++1。現在我們已經將P(2)描述為上一片語和一個新的位的組合。下一步,U=0++01++00++01101,並得到P(3)=P(1)++0。現在我們注意到,有U=0++01+00+011++01,而P(4)=011=P(2)++1,最後得到P(5)=P(1)++1。運算的步驟如表1所列。

一旦創建了表1,就有了整個編碼的圖表。要創建Lempel-Ziv數據流,則依照公式創建對。如果公式是P(x)=P(A)++B,則每個對為(A++B)。因此P(1)=P(0)++0變為(00++0),P(2)=P(1)++0變為(01++0),依此類推,將所有這些對連接起來,就得到了最後的字元串,結果如表2所列。這樣,C就變成000011010101011,看來比U要長得多。但這里由於U的長度短,因此未能看出優勢,而且包含P(0)的公式都沒有壓縮,所以也引起了長度增加。

Lempel-Ziv字元串的解碼是很簡單的,就是抓住其中的對,對照表1進行重構。

表1 編碼過程

步 驟 值 公 式 U

0 - P(0) 0010001101
1 0 P(1)=P(0)++0 0++010001101
2 01 P(2)=P(1)++1 0++01++00++01101
3 00 P(3)=P(1)++0 0++01++00++01101
4 011 P(4)=P(2)++1 0++01++00++011++01
5 01 P(5)=P(1)++1 0++01++00++011++01

表2 如何創建編碼字元串

公 式 P(1)=P(0)++0 P(2)=P(1)++1 P(3)=P(1)++0 P(4)=P(2)++1 P(5)=P(1)++1
對 00++0=000 01++1=011 01++0=010 10=++1=101 01++1=011
C
000++011++010++101++011=000011010101011

4 操作系統對內存壓縮的支持

在壓縮內存系統中,內存大小指的是實際內存大小,它比物理內存大。在引導時,BIOS向操作系統報告的內存大小就比實際安裝的物理內存要大。例如,硬體原型安裝的是512MB的SDRAM,但BIOS向操作系統報告的內存大小為1GB。當應用程序數據以2:1或更高的比率壓縮時,實際內存的工作方式與一般操作系統的內存工作方式是相同的。但當應用程序以未壓縮數據來填充內存時(如一個zip文件不可能達到2:1的壓縮比率),由於一般的OS只看到實際地址空間,因此不能意識到物理內存已經耗盡。例如,一個操作系統的實際內存為1024MB,而牧師內存為512MB。這時實際內存已經分配了600MB,系統顯示還有424MB的空閑內存。但是由於已分配內存的壓縮率很低,此時物理內存的耗用已經接近512MB。如果再近一步地分配內存,那麼系統就會因為物理內存的耗盡而崩潰,盡管它仍然顯示還有424MB的空閑內存。這種情況下,必須由操作系統提供對壓縮內存進行管理的支持。

由於內存壓縮是一個比較新的概念,一般的情況作系統都沒有這樣的機制來區分實際地址和物理地址,也不能處理「物理內存耗盡」的情況。不過,只要對操作系統內核做一些小的改動或者在操作系統之上增加一個設備驅動程序,即可達到目的。

一般來說,要從以下幾方面對壓縮內存進行管理。

(1)監控物理內存使用情況

通過輪詢或中斷法,查看物理內存的使用情況,並在物理內存耗盡前給出警告。壓縮內存管理常式是通過壓縮內存控制器中的一些寄存器來實現對物理內存的監控。SUR報告物理內存的使用情況,SUTHR和SUTLR用於設置中斷臨界值。壓縮內存管理演算法是基於物理內存使用的四種狀態,分別為steady、acquire、danger和interrupt,其臨界值的關系是mc_th_acquire<mc_th_danger<mc_th_interrupt。

我們可以使用輪詢和中斷相結合的方法進行監控,並對物理內存使用的變化作出反應。通過時鍾中斷來驅動輪常式,該常式每10ms讀取一次SUR的值,並將它與系統設定的臨界值比較。當系統處於steady狀態時,不用採取任何行動;當使用超過mc_th_acquire,應該增加nr_rsrv_pages來限制內存分配,但這並未引起內存缺乏;當使用超過mc_th_danger,應該增加nr_rsrv_pages到引起內存缺乏,並導致頁面分配器和置換進程回收內存頁面,一旦進入到該狀態,物理內存管理常式會喚醒置換進程回收內存。

(2)回收內存以及清空空閑頁面內容以減少使用

以標準的Linux內核為例,操作系統中有兩具主要的變數來管理內存太少的情形。這兩個變數是nr_free_pages和struct freepages。為了檢測內存是否已耗盡,在分配內存前要進行檢查。

if(nr_free_pages<freepages.min){

/*內存太少,回收頁面*/

}

else

{/*可以進行分配*/

在內存壓縮系統中,通過增加一個新變數nr_rsrv_pages來完成此功能。這樣就使最小空閑頁面數量變為:freepages.min"=freepages.min+nr_rsrv_pages。

通過動態地調整nr_rsrv_pages變數,壓縮內存管理常式可以人為地造成內存缺乏的現象,從而引起置換進程回收頁面,此時會將調用進程暫時掛起。回收內存包含縮減各種緩沖,並將進程頁面置換到磁碟上。當頁面返回到空閑頁面池時,它們會被清零。我們可以使用前面提到的快速頁面操作來減少清空頁面操作所帶來的開銷。

(3)阻塞CPU周期以減少物理內存使用率

當物理內存使用超過監界值mc_th_interrupt,控制器就中斷處理器,nr_rsrv_pages進一步增加,然後CPU blocker就開始運行。我們在輪詢機制的基礎上還使用了中斷機制,因為中斷機制比輪詢機制更加快速。如果在10ms的間隔中,物理內存使用突然上升,硬體中斷會比輪詢常式更早檢測到這一情況。為了更加安全,我們使用CPUblocker來阻塞引起物理內存使用的進程。CPU blocker是空閑線程,它們可以使CPU空忙。由於頁面被置換到磁碟是以機器速度運行的,而物理內存使用卻可以以內存訪問速度運行,速度從而得到增加。當牧師內存使用持續增加,以至換頁也無法緩解時,進程需要被阻塞。我們就通過啟動CPUblocker來阻塞CPU周期直到換頁機制能有效地降低物理內存使用。CPUblocker不會阻塞中斷,而且每40ms它就會讓出CPU以免其它進程被餓死。

5 內存壓縮技術在嵌入式系統中的應用

嵌入式系統是一種特殊的計算機系統,它是一個更大的系統或設備的一部分。通常,一個嵌入式系統是駐留在單處理機底板上的,其應用程序存儲在ROM中。事實上,所有具有數字介面的設備——監視器、微波爐、VCRs、汽車等,都使用了嵌入式系統。一些嵌入式系統包含了操作系統,稱為嵌入式操作系統。為了滿足嵌入式應用的特殊要求,嵌入式微處理器雖然在功能上和標准微處理器基本是一樣的,但和工業控制計算機相比,嵌入式微處理器具有體積小、重量輕、成本低、可靠性中,內存仍然是珍貴的資源,因此研究內存壓縮技術在嵌入式系統中的應用具有一定的價值。

內存壓縮的思想在一些嵌入式操作系統中,實際上已經得到了體現。例如在VxWorks中,當操作系統下載到目標機上時,其中一種方式是將引導程序和VxWorks映像都存放在ROM中。為了將其解壓後再從ROM拷貝到RAM。這種基於軟體的壓縮方式,可以節省ROM空間,但其引導過程相對較慢。

以上的內存壓縮技術在ROM中得到了應用,但對於RAM來講,基於軟體內存壓縮技術,由於其訪問壓縮數據可能造成的延遲和不確定性,會對嵌入式系統的實時性造成和。因此它與虛擬內存技術一樣,在嵌入式系統中未得到廣泛應用。

本文所介紹的內存壓縮系統是基於硬體的。在相同基準下,測試結果顯示出,該系統的運行速度比標准系統的運行速度快1.3倍。如果要實現相同大小的內存,採用內存壓縮系統的硬體費用比購買RAM的費用要低,而且內存越大,其節省的費用越多,可以達到一半的價錢。因此筆者認為在內存資源極其寶貴的嵌入式系統中,實現基於硬體的內存壓縮系統具有較大的價值。

結語

本文介紹的內存壓縮系統是基於專門的硬體支持,即L3高速緩沖和內存控制器。在目前大多數Pentium以上架構的硬體平台上,只需要對操作系統內核做一些小的屐,或者增加一個設備驅動及服務程序,即可完成此項功能。由於嵌入式系統對實時性的要求,基於硬體的內存壓縮技術可以在增大可用內存的同時不影響系統的實時性,其硬體費用相對RAM的價格更低,具有一定的實用價值。

Ⅲ 壓縮文件的運行原理

有損壓縮和無損壓縮。 如果您從互聯網上下載了許多程序和文件,可能會遇到很多ZIP文件。這種壓縮機制是一種很方便的發明,尤其是對網路用戶,因為它可以減小文件中的比特和位元組總數,猜桐使文件能夠通過較慢的互聯網連接實現更快傳輸,此外還可以減少文件的磁碟佔用空間。在下載了文件後,計算機可使用WinZip或Stuffit這樣的程序來展開文件,將其復原到原始大小。如果一切正常,展開的文件與壓縮前的原桐檔始文件將完全相同。
乍一聽好像很神秘:您是怎樣減少比特和位元組的數量並將它們原封不動地還原回去的呢?等一切水落石出之後,您會發現這個過程背後的基本理念其實非常簡單明了。在本文中,我們將討論這種通過簡單壓縮來明顯減小文件的方法。
大多數計算機文件類型都包含相當多的冗餘內容——它們會反復列出一些相同的信息。文件壓縮程序就是要消除這種冗餘現象。與反復列出某一塊信息不同,文件壓縮程序只列出該信息一次,然後當它在原始程序中出現時再重新引用它。
以我們熟悉的信息類型——單詞——為例子。
肯尼迪(John F. Kennedy)在1961年的就職演說中曾說過下面這段著名的話:
Ask not what your country can do for you——ask what you can do for your country.(不要問國家能為你做些什麼,而應該問自己能為國家做些什麼。)
這段話有17個單詞,包含61個字母、16個空格、1個破折號和1個句點。如果每個字母、空格或標點都佔用1個內存單元,那麼文件的總大小為79個單元。為了減小文件的大小,我們需要找出冗餘的部分。
我們立刻發現:
如果忽略大小寫字母間的區別,這個句子幾乎有一半是冗餘的。九個單詞(ask、not、what、your、country、can、do、for、you)幾乎提供了組成整句話所需的所有東西。為了構造出另一半句子,我們只需要拿出前半段句子中的單詞,然後加上空格和標點就行了。
大多數壓縮程序使用基於自適應字典的LZ演算法來縮小文件。「LZ」指的是此演算法的發明者Lempel和Ziv,「字典」指的是對數據塊進行歸類的方法。
排列字典的機制有很多種,它也可以像編號列表那樣簡單。在我們檢查肯尼迪這句著名講話時,可以挑出重復的單詞,並將它們放到編號索引中。然後,我們直接寫入編號而不是寫入整個單詞。
因此,如果我們的字典是:
ask
what
your
country
can
do
for
you
我們的句子現在就應該是這樣的:
1 not 2 3 4 5 6 7 8-- 1 2 8 5 6 7 3 4
如果您了解這種機制,那麼只需使用該字典和編號模式即可輕松重新構造出原始句子。這就是在展開某個下載文件時,計算機中的解壓縮程序所做的工作。你可能還遇到過能夠自行解壓縮的壓縮文件。若要創建這種文件,編程人員需要在被壓縮的文件中設置一個簡單的解壓縮程序。在下載完畢後,它可以自動重新構造出原始文件。
但是使用這種機制究竟能夠節省多少空間呢?「1 not 2 3 4 5 6 7 8——1 2 8 5 6 7 3 4」當然短於「Ask not what your country can do for you-- ask what you can do for your country.」,但應注意的是,我們需要隨文件一起保存這個字典。
在實際壓縮方案中,計算出各種文件需求是一個相當復雜的過程。讓我們回過頭考慮一下上面的例子。每個字元和空格都佔用1個內存單元,整個原句要佔用79個單元。壓縮後的句子(包括空格)佔用了37個單元,而字典(單詞和編號)也佔用了37個單元。也就是說,文件的大小為74個單元,因此我們並沒有把文件大小減少很多。
但這只是一個句子的情況!可以想像的是,如果用該壓縮程序處理完肯尼迪講話的其餘部分,我們會發現這些單詞以及其他單詞重復了更多次。而且,正如下一節所言,為了得到盡可能高的組織效率,可以對字典進行重寫。
在上一個的例子中,我們挑出了所有重復的單詞並將它們放在一個字典中。對於我們來說,這是最顯而易見的字典編寫方法。但是壓縮程序卻不這樣認為:它對單詞沒有概念——它只會尋找各個模式。為了盡可能減小文件的大小,它會仔細挑選出最優模式。
如果從這穗輪坦個角度處理該句子,我們最終會得到一個完全不同的字典。
如果壓縮程序掃描肯尼迪的這句話,它遇到的第一個冗餘部分只有幾個字母長。在ask not what your中,出現了一個重復的模式,即字母t後面跟一個空格——在not和what中。如果壓縮程序將此模式寫入字典,則每次出現「t」後面跟一個空格的情況時,它會寫入一個「1」。但是在這個短句中,此模式的出現次數不夠多,不足以將其保留為字典中的一個條目,因此程序最終會覆蓋它。
程序接下來注意到的內容是ou,在your和country中都出現了它。如果這是一篇較長的文檔,將此模式寫入字典會節省大量空間——在英語中ou是一個十分常見的字母組合。但是在壓縮程序看完整個句子後,它立即發現了一個更好的字典條目選擇:不僅ou發生了重復,而且your和country整個單詞都發生了重復,並且它們實際上是作為一個短語your country一起發生重復的。在本例中,程序會用your country條目覆蓋掉字典中的ou條目。
短語can do for也發生了重復,一次後面跟著your,另一次跟著you,因此我們又發現can do for you也是一種重復模式。這樣,我們可以用一個數字來代替15個字元(包含空格),而your country只允許我們用一個數字代替13個字元(包含空格),所以程序會用r country條目覆蓋your country條目,然後再寫入一個單獨的can do for you條目。程序通過這種方式繼續工作,挑出所有重復的信息,然後計算應該將哪一種模式寫入字典。基於自適應字典的LZ演算法中的「自適應」部分指的就是這種重寫字典的能力。程序執行此工作的過程實際上非常復雜。
無論使用什麼方法,這種深入搜索機制都能比僅僅挑出單詞這種方法更有效率地對文件進行壓縮。如果使用我們上面提取出的模式,然後用「__」代替空格,最終將得到下面這個更大的字典:
ask__
what__&shy;
you
r__country
__can__do__for__you
而句子則較短:
「1not__2345__--__12354」
句子現在佔用18個內存單元,字典佔用41個單元。所以,我們將文件總大小從79個單元壓縮到了59個單元!這僅僅是壓縮句子的一種方法,而且不一定是最高效的方法。(您能找到更好的方法嗎?)
文件壓縮率取決於多種因素,包括文件類型、文件大小和壓縮方案。
在世界上的大多數語言中,某些字母和單詞經常以相同的模式一起出現。正是由於這種高冗餘性,而導致文本文件的壓縮率會很高。通常大小合適的文本文件的壓縮率可以達到50%或更高。大多數編程語言的冗餘度也很高,因為它們的命令相對較少,並且命令經常採用一種設定的模式。對於包含大量不重復信息的文件(例如圖像或MP3文件),則不能使用這種機制來獲得很高的壓縮率,因為它們不包含重復多次的模式。
如果文件有大量重復模式,那麼壓縮率通常會隨著文件大小的增加而增加。從我們的例子中就可以看出這一點——如果我們摘錄的肯尼迪講話再長一些,您會發現又多次出現了我們字典中的模式,因此能夠通過每個字典條目節省更多的文件空間。此外,對於更大的文件,還可能出現具有更大普遍性的模式,從而能夠創建出效率更高的字典。
此外,文件壓縮效率還取決於壓縮程序使用的具體演算法。有些程序能夠在某些類型的文件中更好地尋找到模式,因此能更有效地壓縮這些類型的文件。其他一些壓縮程序在字典中又使用了字典,這使它們在壓縮大文件時表現很好,但是在壓縮較小的文件時效率不高。盡管這一類的所有壓縮程序都基於同一個基本理念,但是它們的執行方式卻各不相同。程序開發人員始終在嘗試建立更好的壓縮機制。 我們在上文中討論的壓縮類型稱為無損壓縮,因為您重新創建的文件與原始文件完全相同。所有無損壓縮都基於這樣一種理念:將文件變為「較小」的形式以利於傳輸或存儲,並在另一方收到它後復原以便重新使用它。
有損壓縮則與此大不相同。這些程序直接去除「不必要」的信息,對文件進行剪裁以使它變得更小。這種類型的壓縮大量應用於減小點陣圖圖像的文件大小,因為點陣圖圖像的體積通常非常龐大。為了了解有損壓縮的工作原理,讓我們看看你的計算機如何對一張掃描的照片進行壓縮。
對於此類文件,無損壓縮程序的壓縮率通常不高。盡管圖片的大部分看起來都是相同的——例如,整個天空都是藍色的——但是大部分像素之間都存在微小的差異。為了使圖片變得更小同時不降低其解析度,您必須更改某些像素的顏色值。如果圖片中包含大量的藍色天空,程序會挑選一種能夠用於所有像素的藍色。然後,程序重寫該文件,所有天空像素的值都使用此信息。如果壓縮方案選擇得當,您不會注意到任何變化,但是文件大小會顯著減小。
當然,對於有損壓縮,在文件壓縮後您無法將其復原成原始文件的樣子。您必須接受壓縮程序對原始文件的重新解釋。因此,如果需要完全重現原來的內容(例如軟體應用程序、資料庫和總統就職演說),則不應該使用這種壓縮形式。

熱點內容
pc游戲編程人機博弈源碼 發布:2025-03-13 04:51:45 瀏覽:603
手機原生配置低怎麼玩流暢 發布:2025-03-13 04:35:31 瀏覽:735
分線器安卓供電口有什麼用 發布:2025-03-13 04:19:54 瀏覽:136
埠訪問關系 發布:2025-03-13 03:49:50 瀏覽:789
運用零基預演算法 發布:2025-03-13 03:45:30 瀏覽:791
安卓伺服器搭建web 發布:2025-03-13 03:40:26 瀏覽:317
銅板演算法 發布:2025-03-13 03:40:25 瀏覽:621
ins怎麼保存圖片安卓 發布:2025-03-13 03:38:14 瀏覽:214
什麼資料庫快 發布:2025-03-13 03:34:38 瀏覽:52
喋血復仇加入伺服器失敗怎麼回事 發布:2025-03-13 03:33:37 瀏覽:698