Gif開發筆記(一):gif介紹、編譯和工程模板

若該文爲原創文章,轉載請註明原文出處
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/110530966
長期持續帶來更多項目與技術分享,諮詢請加QQ:2149793六、微信:yangsir198808
紅胖子(紅模仿)的博文大全:開發技術集合(包含Qt實用技術、樹莓派、三維、OpenCV、OpenGL、ffmpeg、OSG、單片機、軟硬結合等等)持續更新中…(點擊傳送門)linux

Qt開發專欄:三方庫開發技術


前言

  實現gif圖片的解碼和生成。算法


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色。


GifLib

簡介

  圖形交換格式(c)是CompuServe Incorporated的版權全部。GIF(sm)是CompuServe Incorporated的服務標記屬性。
  該庫用能夠用於任何須要讀/寫GIF文件格式的應用程序。
  CSDN:QQ羣:1047134658(點擊「文件」搜索「giflib」,羣內與博文同步更新)測試


GifLib庫編譯

步驟一:解壓

  在這裏插入圖片描述

  查看項目的目錄結構,實際上是linux的,因此應該是使用linux編譯,先上msys。優化

步驟二:使用mysy從新部署目錄結構

  在這裏插入圖片描述

步驟三:引入Qt的mingw32

export PATH=$PATH:/mingw530_32/bin

步驟四:目錄make,錯誤缺少cc

  在這裏插入圖片描述
  make出現錯誤
  在這裏插入圖片描述
  引入CC動畫

export CC=gcc

  在這裏插入圖片描述
  繼續編譯。spa

步驟五:出現錯誤「GifErrorString」

  在這裏插入圖片描述

  原本準備解決,結果一看,已經有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


Demo

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));
}

  在這裏插入圖片描述

運行結果

  在這裏插入圖片描述

工程模板v1.0.0

  對應模板「gifDemo_v1.0.0_基礎模板_測試庫是否加載成功.rar」。


若該文爲原創文章,轉載請註明原文出處
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/110530966

相關文章
相關標籤/搜索