前言
實現gif圖片的解碼和生成。
GIF格式的名稱是Graphics Interchange Format的縮寫,是在1987年由Compu Serve公司為了填補跨平臺影像格式的空白而發展起來的。GIF可以被PC和Mactiontosh等多種平臺上被支援。
GIF是一種點陣圖。點陣圖的大致原理是:圖片由許多的畫素組成,每一個畫素都被指定了一種顏色,這些畫素綜合起來就構成了圖片。GIF採用的是Lempel-Zev-Welch(LZW)壓縮演算法,最高支援256種顏色。由於這種特性,GIF比較適用於色彩較少的圖片,比如卡通造型、公司標誌等等。如果碰到需要用真彩色的場合,那麼GIF的表現力就有限了。GIF通常會自帶一個調色盤,裡面存放需要用到的各種顏色。在Web運用中,影像的檔案量的大小將會明顯地影響到下載的速度,因此我們可以根據GIF帶調色盤的特性來優化調色盤,減少影像使用的顏色數(有些影像用不到的顏色可以捨去),而不影響到圖片的質量。
GIF格式和其他影像格式的最大區別在於,它完全是作為一種公用標準而設計的,由於Compu Serve網路的流行,許多平臺都支援GIF格式。Compu Serve通過免費發行格式說明書推廣GIF,但要求使用GIF檔案格式的軟體要包含其版權資訊的說明。
GIF具有GIF87a和GIF89a兩個版本。
- GIF87a版本是1987年推出的,一個檔案儲存一個影像,嚴格不支援透明畫素;GIF87a採用LZW壓縮演算法,它能夠在保持影像質量的前提下將影像尺寸壓縮百分之二十到二十五。
- GIF89a版本是1989年推出的很有特色的版本,該版本允許一個檔案儲存多個影像,可實現動畫功能,允許某些畫素透明。在這個版本中,為GIF文件擴充了圖形控制區塊、備註、說明、應用程式程式設計介面4個區塊,並提供了對透明色和多幀動畫的支援。
其中GIF89a在透明、隔行交錯和動畫GIF方面做出了重大改進。首先是支援透明,GIF89a允許圖片中的某些部分不可見。這項特性非常重要,使得我們在某些場合能夠利用這樣一種特性來使影像的邊緣不再呈現出矩形邊框,而變成我們想要的任意形狀。這些透明區域,可以很方便地在Photoshop、Fireworks中生成並且匯出為GIF89a格式的GIF圖片來實現。當然,透明並不意味著邊框就不再存在事實上,它是存在的,只不過不顯示罷了,這樣可以使插入的圖片和整體網頁更加協調。
GIF格式的影像檔案具有如下特點:
- GIF格式影像檔案的副檔名是“.gif”。
- 對於灰度影像表現最佳。
- 具有GIF87a和GIF89a兩個版本。
- 採用改進的LZW壓縮演算法處理影像資料。
- 調色盤資料有通用調色盤和區域性調色盤之分,有不同的顏色取值。
- 不支援24bit彩色模式,最多儲存256色。
圖形交換格式(c)是CompuServe Incorporated的版權所有。GIF(sm)是CompuServe Incorporated的服務標記屬性。
該庫用可以用於任何需要讀/寫GIF檔案格式的應用程式。
CSDN:QQ群:1047134658(點選“檔案”搜尋“giflib”,群內與博文同步更新)
檢視專案的目錄結構,其實是linux的,所以應該是使用linux編譯,先上msys。
export PATH=$PATH:/mingw530_32/bin
make出現錯誤
引入CC
export CC=gcc
繼續編譯。
本來準備解決,結果一看,已經有libgif.a了,所以其實報錯的編譯可能是其測試的其他demo示例需要依賴(經驗之談)。
gifManager.pri
INCLUDEPATH += $$PWD
DEPENDPATH += $$PWD
HEADERS += \
$$PWD/GifManager.h
SOURCES += \
$$PWD/GifManager.cpp
# mingw32 版本
INCLUDEPATH += \
$$PWD/giflib-5.2.1-mingw32/include
LIBS += $$PWD/giflib-5.2.1-mingw32/lib/libgif.a
void GifManager::testRunEnv()
{
qDebug() << __FILE__ << __LINE__ << QString(GifErrorString(D_GIF_SUCCEEDED));
qDebug() << __FILE__ << __LINE__ << QString(GifErrorString(D_GIF_ERR_OPEN_FAILED));
qDebug() << __FILE__ << __LINE__ << QString(GifErrorString(D_GIF_ERR_READ_FAILED));
qDebug() << __FILE__ << __LINE__ << QString(GifErrorString(D_GIF_ERR_NOT_GIF_FILE));
qDebug() << __FILE__ << __LINE__ << QString(GifErrorString(D_GIF_ERR_NO_IMAG_DSCR));
}
對應模板“gifDemo_v1.0.0_基礎模板_測試庫是否載入成功.rar”。