拋棄把戲
有損壓縮的一個(gè)簡單且有效的方法是直接拋棄一些數(shù)據(jù)。讓我們來研究一下“拋棄”把戲(leave-it-out trick)如何在黑白照片上運(yùn)用。我們首先要了解一點(diǎn)黑白照片如何在計(jì)算機(jī)上存儲(chǔ)的知識(shí)。照片由大量小點(diǎn)組成,這些小點(diǎn)被稱為“像素”。每個(gè)像素只有一種顏色,這種顏色可以是黑,也可以是白,或黑與白之間的任意灰度。當(dāng)然,我們通常不會(huì)意識(shí)到這些像素,因?yàn)樗鼈兲×?,但如果你離顯示器或電視屏足夠近,就能看到單個(gè)像素。
在計(jì)算機(jī)中存儲(chǔ)的黑白照片里,每個(gè)可能的像素顏色都由一個(gè)數(shù)字代表。比如,讓我們假設(shè)越大的數(shù)字代表越白的顏色,100是最大的數(shù)字。因此100代表白色,0代表黑色,50代表中等灰度,90代表淺灰等等。像素按照矩形方陣排列,其中每個(gè)像素都代表圖片中一些非常小的部分的顏色。方陣的行列總數(shù)就是圖像的“解析度”。比如,許多高清電視的解析度是1 920×1 080,這意味著圖像有1 920列和1 080行像素。像素總數(shù)就是1 920乘以1 080,也就是逾兩百萬像素!數(shù)字相機(jī)也使用相同的術(shù)語。“megapixel”只是個(gè)用來表示百萬像素的花哨名字。因此,一臺(tái)500萬像素的相機(jī)有足夠多行和足夠多列的像素,當(dāng)你將行數(shù)和列數(shù)相乘后,得到的數(shù)就會(huì)超過500萬。當(dāng)照片存儲(chǔ)在計(jì)算機(jī)中時(shí),它就是一個(gè)數(shù)字列表,每個(gè)像素都由數(shù)字代表。
下圖中左上方的帶角樓的房屋照片,比高清電視的解析度低很多:只有320×240。不過,其像素?cái)?shù)目仍然相當(dāng)大(320×240 = 76 800),存儲(chǔ)這張照片的文件,在未壓縮形式下占用了超過230 KB的存儲(chǔ)空間。1 KB約相當(dāng)于1 000個(gè)文本字符——差不多是一段電子郵件的體積。因此,左上方的圖在作為文件存儲(chǔ)時(shí),需要占用的空間約等于200條短電子郵件消息。
我們可以用下列非常簡單的技術(shù)來壓縮這個(gè)文件:每兩行或每兩列像素就忽略或“拋棄”一行或一列。拋棄把戲就是這么簡單!在這個(gè)例子中,結(jié)果是得到了一張解析度更小的照片,這張解析度為160×120的新照片在圖中原照片下面顯示。新文件的體積只有原文件的四分之一(約57 KB)。這是因?yàn)樾聢D片的像素只有原圖片像素的四分之一多——我們同時(shí)去除了原圖片寬和高各一半的像素。相當(dāng)于原圖片的體積減小了一半——一次是水平方向,一次是垂直方向——結(jié)果就是最終體積只有原體積的1/4。
我們還可以再用一次拋棄把戲。將新的160×120像素圖片每兩行或每兩列像素拋棄一行或一列,得到另一張80×60的新圖片,結(jié)果顯示在下圖的左下方。這張圖片的體積又縮小了3/4,其最終體積只有14 KB。相當(dāng)于原始文件體積的6%,這一壓縮比率令人印象非常深刻。