精易论坛

标题: [开源]基于 易 实现的Gif图片分割器,提取GIf图片中的每一帧 [打印本页]

作者: 帅气与大侠    时间: 2017-2-2 20:39
标题: [开源]基于 易 实现的Gif图片分割器,提取GIf图片中的每一帧
本帖最后由 aqwvwv 于 2017-2-2 20:45 编辑

[开源]基于 易 实现的Gif图片分割器,提取GIf图片中的每一帧                                                                                                                     
不知不觉又好几天没有更新发新帖了,刚刚研究完成,来分享一下研究成果。说明:我发帖都是发质量良心帖,都有助于易友学习进步的,同时也希望觉得内容不错的易友,请多支持下,多加分、多点评、多进步,研究不易哎
  在网上,我们经常看到各种各样的图片,尤其是GIF图片的动态效果,让整个网站更加富有表现力!有时候,我们看到一些比较好看的GIF图片或者一些奇特的Gif图片,我们想要停留在某一帧看的清楚一点或者了解这个Gif动画到底是怎么实现的,怀着这种好奇的心理,我们来看一下,今天的开源项目,用 易 来实现GIF图片的预览和分离和保存。
一、 GIF图片基本结构和原理
1、GIF简介
  GIF(Graphics Interchange Format)是CompuServe公司开发的图像文件存储格式,1987年开发的GIF文件格式版本号是GIF87a,1989年进行了扩充,扩充后的版本号定义为GIF89a。 GIF图像文件以数据块(block)为单位来存储图像的相关信息。一个GIF文件由表示图形/图像的数据块、数据子块以及显示图形/图像的控制信息块组成,称为GIF数据流(Data Stream)。数据流中的所有控制信息块和数据块都必须在文件头(Header)和文件结束块(Trailer)之间。
  GIF文件格式采用了LZW(Lempel-Ziv Walch)压缩算法来存储图像数据,定义了允许用户为图像设置背景的透明(transparency)属性。此外,GIF文件格式可在一个文件中存放多幅彩色图形/图像。如果在GIF文件中存放有多幅图,它们可以像演幻灯片那样显示或者像动画那样演示。
2、GIF文件结构
GIF文件结构的典型结构如图1-01所示。为下文说明方便,在图片右边加了编号。
图1-01
数据块可分成3类:
控制块(Control Block),图形描绘块(Graphic-Rendering Block)和专用块(Special Purpose Block)。
(1) 控制块:
控制块包含有用来控制数据流(Data Stream)或者设置硬件参数的信息,其成员包括:
GIF文件头(Header)
逻辑屏幕描述块(Logical Screen Descriptor)
图形控制扩展块(Graphic Control Extension)
文件结束块(Trailer)

(2) 图形描绘块:
包含有用来描绘在显示设备上显示图形的信息和数据,其成员包括:
图像描述块(Image Descriptor)
无格式文本扩展块(Plain Text Extension)
全局调色板、局部调色板、图像压缩数据和图像说明扩充块。

(3) 特殊用途数据块:
包含有与图像处理无关的信息,其成员包括:
注释扩展块(Comment Extension)
应用扩展块(Application Extension)
除了在控制块中的逻辑屏幕描述块(Logical Screen Descriptor)和全局彩色表(Global Color Table)的作用范围是整个数据流(Data Stream)之外, 所有其他控制块仅跟在它们后面的图形描绘块。

3、GIF结构详解
由于GIF结构比较复杂,我们就简单讲解一下GIF的文件头吧,因为我们要用到,更多的资料请参看百度文库:http://wenku.baidu.com/view/2c0feaa6f524ccbff121841d.html
(1)文件头描述块(Header)定义GIF数据流(GIF Data Stream),它的结构如图1-02所示。文件头描述块(Header)由GIF标记域(Signature)和版本号(Version)域组成,是一个由6个固定字节组成的数据块,它们用来说明使用的文件格式是GIF格式及当前所用的版本号。GIF标记域(Signature)存放的是“GIF”,版本号域存放的是1987年5月发布的“87a”或者1989年7月发布的“89a”,或者更加新的版本号。
1-02
这里我们识别一个图片是不是GIF文件,就是判断文件的前三个字节是不是GIF,就算是图片呗重命名为jpg或者其他的,只要用浏览器打开,都是可以正常显示的,这也就是为什么有些jpg图片也会动的原因。同理PNG图片的前三个图片是PNG.
(2)逻辑屏幕描述块(Logical Screen Descriptor)包含定义图像显示区域的参数,包括背景颜色信息。这个数据块中的坐标相对于虚拟屏幕的左上角,不一定是指显示屏的绝对坐标,这就意味可以参照窗口软件环境下的窗口坐标或者打印机坐标来设计图像显示程序。逻辑屏幕描述块的结构如图1-03所示
1-03
这里我们看到GIF的字段,可以读取GIF图片的实际高度和宽度,到这里就差不多了,其他的大家看百度文库的文档吧,我就不再说了。
二、 GIF分解工具简介
  上面给大家讲了那么多的GIF文件的东西,可能大家看的有点不耐烦,目的主要是为了让大家了解GIF的结构,这样才能更好的读懂项目里面的代码。下面来看一段读取GIF文件信息的代码,体会一下:
  
临时字节集 = gif图片
标识 = 到文本 (取字节集左边 (临时字节集, 3))  ' 前3个字节,标识"GIF"
版本号 = 到文本 (取字节集中间 (临时字节集, 4, 3))  ' 3~6三个字节为版本号(通常为89a,表示1989年的版本,还有一个版本为87a,为1987年的,具体百度)
_宽度 = 到整数 (取字节集数据 (取字节集中间 (临时字节集, 7, 2), #长整数型, ))  ' 7~8两个字节为宽度 通常为uint16位无符号整数,所以要通过取字节集数据才能解析
_高度 = 到整数 (取字节集数据 (取字节集中间 (临时字节集, 9, 2), #长整数型, ))  ' 9~10两个字节为高度 通常为uint16位无符号整数,所以要通过取字节集数据才能解析

这段代码读取和显示GIF的标识、版本号、宽度和高度信息。可以看到,都是读取文件的特定的几个字节。
下面来看看这个开源项目的界面吧,首先GIF图片,如下:
看起来很炫,是吧,然后我们来看看到底都有哪些帧组成的,如图:
我们可以看到GIF的版本号和帧数,一共是8帧,也就是八张图片,我们点击另存为,输入图片名称,如Img,保存每一帧图片,如图:
我们看到,八张图片都分离出来了,看起来好漂亮啊,图片的名字就是我们刚才输入的名称后面加上编号。
下面我们来看几个比较神秘的GIF,如下图:
这几张图片看起来是无限循环的,没有停顿,那么他们到底有多少帧呢?这个就留给大家去探索吧!
叫你看完不评分、见你看完不评分
三、 GIF分割者源码下载链接    【回复可见】
[hide=d365] GIF分割者源码.zip (41.28 KB, 下载次数: 1555) 测试资源.zip (887.72 KB, 下载次数: 349) [/hide]
项目中有不足的地方,大家可以回复或点评指出,大家一起讨论交流


作者: 福仔    时间: 2017-2-2 20:53
好像很牛X的样子,先下载个看看
作者: 巫婆    时间: 2017-2-2 20:55
下载看看......

作者: 网络注册会员    时间: 2017-2-2 20:56
顶你一下我
作者: zzzzzzzz88    时间: 2017-2-2 20:57
GIF分割者源码
作者: 玫瑰情人    时间: 2017-2-2 21:04
好像很牛X的样子,先下载个看看

作者: 小李吊炸天    时间: 2017-2-2 21:11
提示: 作者被禁止或删除 内容自动屏蔽
作者: yhll5285627    时间: 2017-2-2 21:13
提示: 作者被禁止或删除 内容自动屏蔽
作者: wkf    时间: 2017-2-2 21:14
值得收藏
作者: 汉族    时间: 2017-2-2 21:16
这种都是分析格式才能解析的
作者: 汉族    时间: 2017-2-2 21:22
我记得  GDIPLus 这个图型引擎模块 就有GIF分割
作者: 帅气与大侠    时间: 2017-2-2 21:27
汉族 发表于 2017-2-2 21:16
这种都是分析格式才能解析的

@汉族 源码中出现内存不足吗?是读入的gif文件太大还是内存累加没释放照成的?
作者: Ohyes    时间: 2017-2-2 21:39
大神啊,学习咯
作者: qq2334391383    时间: 2017-2-2 21:43
前来膜拜大神,这太厉害了

作者: mnn5gp    时间: 2017-2-2 21:44
66666666666666666666666666666666666

作者: mrzcpo    时间: 2017-2-2 21:46
这个就厉害了  但是能拼起来嘛
作者: hgy19880905    时间: 2017-2-2 21:53
目中有不足的地方,大家可以回复或点评指出,大家一起讨论交
作者: onefish    时间: 2017-2-2 22:30
#在这里快速回复#666感谢
作者: 5182235367    时间: 2017-2-2 22:39
图片类的,支持开源
作者: 帅气与大侠    时间: 2017-2-2 22:42
mrzcpo 发表于 2017-2-2 21:46
这个就厉害了  但是能拼起来嘛

可以拼起来,都能分割出来了,肯定能拼起来,不过拼起来的代码没写,留给易友们自行发挥
另外掌握了原理了,易友们都可以自己制作开发一个gif录制、或者通过多张图片拼起来制作gif等这类工具
源码中有讲解分割原理,举一反三也就能“拼”
作者: 是大哥吖    时间: 2017-2-2 22:47
6666666666666666
作者: liu2220    时间: 2017-2-2 23:28
这个值得学习下,谢谢楼主分享。
作者: 545176793    时间: 2017-2-2 23:40
感谢楼主分享

作者: ジ秋水    时间: 2017-2-2 23:51
嘿嘿,这个可以有!!...
作者: xslyhk    时间: 2017-2-3 00:19
谢谢分享哦
作者: golijiang    时间: 2017-2-3 00:46
顶上去,必须滴
作者: hizdf    时间: 2017-2-3 01:58
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
揭阳精易科技有限公司申明:我公司所有的培训课程版权归精易所有,任何人以任何方式翻录、盗版、破解本站培训课程,我们必将通过法律途径解决!
公司简介:揭阳市揭东区精易科技有限公司致力于易语言教学培训/易语言学习交流社区的建设与软件开发,多年来

作者: 晓风残月丶    时间: 2017-2-3 07:23
感谢楼主      顶一个
作者: InstallTest    时间: 2017-2-3 08:39
其成员包括
作者: zjghjs    时间: 2017-2-3 08:56
谢谢分享精品源码
作者: 扣扣    时间: 2017-2-3 09:10
没啥说的先顶在下!!!!!!!!!!

作者: vlouse    时间: 2017-2-3 09:36
这个开源的好,感谢楼主的GIF知识分享。
作者: ck66    时间: 2017-2-3 09:49
好像很厉害的样子哦
作者: 358379357    时间: 2017-2-3 10:13
谢谢分享啊
作者: hipxh    时间: 2017-2-3 10:16
新技能已get√
作者: 917907731    时间: 2017-2-3 10:50
好东西 双击66


作者: 時尚℡潮流    时间: 2017-2-3 12:24
下载试试!!!
作者: rgrump    时间: 2017-2-3 13:43
谢谢楼主分析。。。

作者: 久伴我驻我心    时间: 2017-2-3 13:57
谢谢楼主分析。。。


作者: Jason0x1    时间: 2017-2-3 14:04
挺好的东西,
作者: roger1100    时间: 2017-2-3 15:28
基于 易 实现的Gif图片分割器,提取GIf图片中的每一帧

作者: sa123123    时间: 2017-2-3 16:16
感谢分享~!学习了~!
作者: liuqiqi87    时间: 2017-2-3 17:06
好东西啊 谢谢分享


作者: 对面4个菜鸡    时间: 2017-2-3 17:24
不错,这个对图片原理要求比较高
作者: 易鹏程    时间: 2017-2-3 17:32
新技能已get√
作者: Ccccccccc    时间: 2017-2-3 17:35
谢谢分享,这个很可以。
作者: 15156363    时间: 2017-2-3 19:13
厉害了word哥
作者: wangxinhui1314    时间: 2017-2-3 20:05
好东西,学习

作者: lqdefeng    时间: 2017-2-3 22:04
好东西,学习

作者: a019872140    时间: 2017-2-3 22:40
项目中有不足的地方
作者: a019872140    时间: 2017-2-3 22:44
能合成 或插入不?
作者: 名无所谓    时间: 2017-2-3 23:22
很赞
作者: 515889127    时间: 2017-2-4 01:38
看看好用不
作者: 阿蒙    时间: 2017-2-4 09:41
好东西
作者: 绝版ん楠楠    时间: 2017-2-4 11:34
不错,打赏了~
作者: 反客为主    时间: 2017-2-4 12:10
学习一下,感谢
作者: 350246356    时间: 2017-2-4 14:43
感谢分享,支持支持支持你

作者: 镇坛道德标杆    时间: 2017-2-4 16:07
这个不错   
作者: 网上邻居007    时间: 2017-2-4 17:36
非常感谢支持
作者: 624381630    时间: 2017-2-4 18:01
我正好需要这个

作者: 明月黄籽实况主    时间: 2017-2-4 19:15
感谢源码!
作者: 明月黄籽实况主    时间: 2017-2-4 19:15
感谢源码!
作者: 益玮    时间: 2017-2-4 21:44
这个是个好东西啊支持支持
作者: qiuyingjia    时间: 2017-2-4 21:50
可以的,支持一下
作者: luonia    时间: 2017-2-4 22:21
感谢源码!
作者: 小飞爱精易    时间: 2017-2-5 00:41
不错
作者: 沈远    时间: 2017-2-5 07:58
看看啊 应该不错的样子
作者: 工程师8421    时间: 2017-2-5 08:00
感谢源码!
作者: 825299534    时间: 2017-2-5 08:50
6666666666

作者: 高调Cryin    时间: 2017-2-5 09:25
看看对图片的处理

作者: 困兽斗    时间: 2017-2-5 10:30
好强大啊。膜拜一下

作者: 中华威少    时间: 2017-2-5 11:41
牛, 感谢福仔的666支持
作者: 然后    时间: 2017-2-5 11:45
支持开源~!感谢分享
作者: 爱死你巴掌    时间: 2017-2-5 12:02
谢谢分享!

作者: 唐老湿    时间: 2017-2-5 12:35
视频怎么提取为帧?
作者: wmv520    时间: 2017-2-5 13:10

好强大啊。膜拜一下
作者: 编程唐少    时间: 2017-2-5 18:07
        提示 内存不足 还得继续升级裁成啊
作者: 猥琐小胖子    时间: 2017-2-5 18:12
编程唐少 发表于 2017-2-5 18:07
提示 内存不足 还得继续升级裁成啊

你这是啥图啊。
作者: 客观    时间: 2017-2-5 19:22
提示: 作者被禁止或删除 内容自动屏蔽
作者: 1771509907    时间: 2017-2-5 19:43
支持原创  厉害
作者: huixin    时间: 2017-2-5 23:28
支持一下楼主
作者: 万里晴空    时间: 2017-2-6 01:18
666666,厉害了,我试试看
作者: 中华威少    时间: 2017-2-6 08:38
学习了66666666666
作者: 网上邻居007    时间: 2017-2-6 10:58
很好很强大啊
作者: xuxiyu1986    时间: 2017-2-6 11:32
感觉好高级
作者: UserXCh    时间: 2017-2-6 12:02
学习学习。
作者: 晓月Am    时间: 2017-2-6 13:50
感谢分享了

作者: a83669220    时间: 2017-2-6 14:37
支持开源~!感谢分享
作者: Onsxsen    时间: 2017-2-6 17:14
不错,是我需要的,收下了
作者: luckfish45    时间: 2017-2-6 18:26
看看具体代码是如何实现的
作者: jable    时间: 2017-2-6 20:58
看起来很不错的
作者: 千城偶吧    时间: 2017-2-6 21:04
看看是什么
作者: soulan    时间: 2017-2-6 23:06
Gif图片分割器,提取GIf图片
作者: 又是饭桶    时间: 2017-2-6 23:11
需要用到0.0拿走编译 谢谢楼主
作者: fgt1t5y    时间: 2017-2-7 10:53
{:soso__3409329614010722382_4:}

作者: MrSimple    时间: 2017-2-7 11:06
膜拜了,这个好像很腻害的图片操作

作者: yinghao2005    时间: 2017-2-7 12:08
这个不错感谢分享

作者: X.lycs    时间: 2017-2-7 12:34
我要拿去提取A片
作者: 夏木Frank    时间: 2017-2-7 13:14
提示: 作者被禁止或删除 内容自动屏蔽
作者: chen497147884    时间: 2017-2-7 14:41
感谢分享!!!!!!!1




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4