若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/110530966
长期继续带来更多我的项目与技术分享,征询请加QQ:21497936、微信:yangsir198808
红瘦子(红模拟)的博文大全:开发技术汇合(蕴含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬联合等等)继续更新中…(点击传送门)
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
持续编译。
步骤五:呈现谬误“GifErrorString”
原本筹备解决,后果一看,曾经有libgif.a了,所以其实报错的编译可能是其测试的其余demo示例须要依赖(经验之谈)。
模块化
gifManager.pri
INCLUDEPATH += $$PWDDEPENDPATH += $$PWDHEADERS += \ $$PWD/GifManager.hSOURCES += \ $$PWD/GifManager.cpp# mingw32 版本INCLUDEPATH += \ $$PWD/giflib-5.2.1-mingw32/includeLIBS += $$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