回覆列表
  • 1 # 使用者3136867717565

    不同圖片格式的壓縮方式是不同的。

    bmp檔案

    bmp(bitmap的縮寫)檔案格式是windows本身的點陣圖檔案格式,所謂本身是指windows內部儲存點陣圖即採用這種格式。一個.bmp格式的檔案通常有.bmp的副檔名,但有一些是以.rle為副檔名的,rle的意思是行程長度編碼(runlengthencoding)。這樣的檔案意味著其使用的資料壓縮方法是.bmp格式檔案支援的兩種rle方法中的一種。

    bmp檔案可用每象素1、4、8、16或24位來編碼顏色資訊,這個位數稱作圖象的顏色深度,它決定了圖象所含的最大顏色數。一幅1-bpp(位每象素,bitperpixel)的圖象只能有兩種顏色。而一幅24-bpp的圖象可以有超過16兆種不同的顏色。

    下一頁的圖說明了一個典型.bmp檔案的結構。它是以256色也就是8-bpp為例的,檔案被分成四個主要的部分:一個位圖檔案頭,一個位圖資訊頭,一個色表和點陣圖資料本身。點陣圖檔案頭包含關於這個檔案的資訊。如從哪裡開始是點陣圖資料的定位資訊,點陣圖資訊頭含有關於這幅圖象的資訊,例如以象素為單位的寬度和高度。色表中有圖象顏色的rgb值。對顯示卡來說,如果它不能一次顯示超過256種顏色,讀取和顯示.bmp檔案的程式能夠把這些rgb值轉換到顯示卡的調色盤來產生準確的顏色。

    bmp檔案的點陣圖資料格式依賴於編碼每個象素顏色所用的位數。對於一個256色的圖象來說,每個象素佔用檔案中點陣圖資料部分的一個位元組。象素的值不是rgb顏色值,而是檔案中色表的一個索引。所以在色表中如果第一個r/g/b值是255/0/0,那麼象素值為0表示它是鮮紅色,象素值按從左到右的順序儲存,通常從最後一行開始。所以在一個256色的檔案中,點陣圖資料中第一個位元組就是圖象左下角的象素的顏色索引,第二個就是它右邊的那個象素的顏色索引。如果點陣圖資料中每行的位元組數是奇數,就要在每行都加一個附加的位元組來調整點陣圖資料邊界為16位的整數倍。

    並不是所有的bmp檔案結構都象表中所列的那樣,例如16和24-bpp,檔案就沒有色表,象素值直接表示rgb值,另外檔案私有部分的內部儲存格式也是可以變化的。例如,在16和256色.bmp檔案中的點陣圖資料採用rle演算法來壓縮,這種演算法用顏色加象素個數來取代一串顏色相同的序列,而且,windows還支援os/2下的.bmp檔案,儘管它使用了不同的點陣圖資訊頭和色表格式。

    pcx檔案

    .pcx是在pc上成為點陣圖檔案儲存標準的第一種圖象檔案格式。它最早出現在zsoft公司的paintbrush軟體包中,在80年代早期授權給微軟與其產品捆綁發行,而後轉變為microsoftpaintbrush,併成為windows的一部分。雖然使用這種格式的人在減少,但這種帶有.pcx副檔名的檔案在今天仍是十分常見的。

    pcx檔案分為三部分,依次為:pcx檔案頭,點陣圖資料和一個可選的色表。檔案頭長達128個位元組,分為幾個域,包括圖象的尺寸和每個象素顏色的編碼位數。點陣圖資料用一種簡單的rle演算法壓縮,最後的可選色表有256個rgb值,pcx格式最初是為cga和ega來設計的,後來經過修改也支援vga和真彩色顯示卡,現在pcx圖象可以用1、4、8或24-bpp來對顏色資料進行編碼。

    tiff檔案

    pcx格式是所有點陣圖檔案格式中最簡單的,而tiff(taggedimagefileformat)則是最難的一種。

    tiff檔案含有.tif的副檔名。它以8位元組長的圖象檔案頭開始(ifh),這個檔案頭中最重要的成員是一個指向名為圖象檔案目錄(ifd)的資料結構的指標。ifd是一個名為標記(tag)的用於區分一個或多個可變長度資料塊的表,標記中含有關於圖象的資訊。tiff檔案格式定義70多種不同型別的標記,有的用來存放以象素為單位的圖象寬度和高度,有的用來存放色表(如果需要的話),當然還必須有用來存放點陣圖資料的標記,一個tiff格式檔案完全為它的標記所決定,而且這種檔案結構極易擴充套件,因為你要附加一些特徵只須增加一些額外的標記。

    究竟是什麼使tiff檔案如此複雜?一方面,要寫一種能夠識別所用不同標記的軟體非常困難。大多數tiff的閱讀程式只能識別一部分標記,所以會出現這種情況:有時一個應用程式建立的tiff檔案,另一個應用程式卻不能使用。建立tiff檔案的程式還可能會在檔案中加一些只有它自己認識的標記,雖然tiff的閱讀程式可以跳過那些它們不認得的標記,但這樣做總是有可能影響到圖象的質量。

    另一方面,一個tiff檔案可以包含多個圖象,每個圖象都有自己的ifd和一系列標記。tiff檔案中的點陣圖資料可能會用好幾種方法來壓縮,所以一個完備的tiff閱讀程式應該有rle解壓縮程式,lzw解壓縮程式和其他一些演算法的解壓縮程式。然而更糟的是使用lzw的解碼必須得到unisys公司的同意,且通常是需要付版稅的。所以即使是一些相當不錯的tiff閱讀程式在它們遇到lzw演算法壓縮的圖象時也是無能為力的。

    儘管tiff是那麼的複雜,但仍是一種最好的跨平臺格式。因為它非常靈活,無論在視覺上還是其他方面,都能把任何圖象編碼成二進位制形式而不丟失任何屬性。

    gif檔案

    當許多圖象方面的權威一想到lzw的時候,他們也會想到gif(graphicsinterchangeformat,讀作jiff)這是一種常用的跨平臺的點陣圖檔案格式,最初為compuserve公司所創。gif檔案通常帶有.gif的副檔名,而且在compuseve上大量存在。

    gif檔案的結構取決於它屬於哪一個版本,目前的兩種版本分別是gif87a和gif89a,前者較簡單。無論是哪個版本,它都以一個長13位元組的檔案頭開始,檔案頭中包含判定此檔案是gif檔案的標記、版本號和其他的一些資訊。如果這個檔案只有一幅圖象,檔案頭後緊跟一個全域性色表來定義圖象中的顏色。如果含有多幅圖象(gif和tiff格式一樣,允許在一個檔案裡編碼多個圖象),那麼全域性色表就被各個圖象自帶的區域性色表所替代。

    在gif87a檔案中,檔案頭和全域性色表之後是圖象,它可能會是頭尾相接的一串圖象中的第一個,每個圖象由三部分組成,一個10位元組長的圖象描述,一個可選的區域性色表和點陣圖資料。為有效利用空間,點陣圖資料用lzw演算法來壓縮。

    gif89a結構與此類似,但它還包括可選的擴充套件塊來存放每個圖象的附加資訊。gif89a詳細定義了四種擴充套件塊:圖象控制擴充套件塊,它用來描述圖象怎樣被顯示(例如,顯示是應該象一個透明物去覆蓋上一個圖象,還是簡單的替換它);簡單文字擴充套件塊,它包含顯示在圖象中的文字;註釋擴充套件塊,它以ascii文字形式存放註釋;應用擴充套件塊,它存放生成該檔案的應用程式的私有資料。這些擴充套件塊可以出現在檔案中全域性色表的任何地方。

    gif最顯著的優點是它的廣泛使用和它的緊密性。但它有兩個弱點,一個是用gif格式存放的檔案最多隻能含有256種顏色。另一個可能更重要,就是那些使用了gif格式的軟體開發者必須徵得compuserve的同意,他們每賣出一個複製都要向compuserve付版稅。這個政策是compuserve仿效unisys公司作出的,它抑制了那些程式設計師在他的圖象應用程式中支援gif檔案。

    png檔案

    png(portablenetworkgraphic,發音做ping)檔案格式是作為gif的替代品開發的,它能夠避免使用gif檔案所遇到的常見問題。它從gif那裡繼承了許多特徵,而且支援真彩色圖象。更重要的是,在壓縮點陣圖資料時它採用了一種頗受好評的lz77演算法的一個變種,lz77則是lzw的前身,而且可以免費使用。由於篇幅所限,在這裡就不花時間來具體討論png格式了。

    jpeg檔案

    jpeg(jointphotographicexpertsgroup,發音做jay-peg)檔案格式最初由c-cubemicrosystems推出,是為了提供一種儲存深度位象素的有效方法,例如對於照片掃描,顏色很多而且差別細微(有時也不細微)。jpeg和這裡討論的其他格式的最大區別是jpeg使用一種有失真壓縮演算法,無失真壓縮演算法能在解壓後準確再現壓縮前的圖象,而有失真壓縮則犧牲了一部分的圖象資料來達到較高的壓縮率。但是這種損失很小以至於人們很難察覺。

    jpeg圖象壓縮是一個複雜的過程,經常需要專門的硬體來幫助。首先圖象以象素為單位分成8*8的塊。然後,每個塊分三個步驟被壓縮。第一步使用dct(discretecosinetransform)離散餘弦變換把8*8的象素矩陣變成8*8的頻率(也就是顏色改變的速度)矩陣。第二步對頻率矩陣中的值用量化矩陣進行量化,濾掉那些總體上對圖象不重要的部分。第三步,也就是最後一步,對量化後的頻率矩陣使用無失真壓縮。

    因為被量化後的頻率矩陣缺了許多高頻資訊,通常能被壓縮到一半甚至更少。無失真壓縮一般根本不能壓縮真正的照片圖象,所以50%的壓縮率已是相當不錯了,但另一方面,無失真壓縮能把一些圖象檔案尺寸減少90%,這樣的圖象檔案就不適合用jpeg來壓縮。

    jpeg的有損部分產生在第二步,量化矩陣的值越高,從圖象中丟掉的資訊就越多,從而壓縮率就越高,可是同時圖象的質量就越差。在jpeg壓縮時可以選擇一個量化因子,這個因子的值決定了量化矩陣中的數值。理想的量化因子要在壓縮率和圖象質量間達到平衡,所以對不同的圖象要選擇不同的量化因子,通常要經過若干次嘗試後方可確定。

  • 中秋節和大豐收的關聯?
  • 壞老婆最典型的特徵是什麼?