dll下载的地址
 
使用主要调用的是Components这个代码库,引用dll就可以了。
 
 
作者:

以下为这条连接的博客园内容:
 思路很简单,就是先把gif分解成很多帧,然后对帧进行合并,合并帧之前把帧的位置反转一下就可以了。因为我自己对图像处理的知识不懂,只想到了思路,所以这些功能都要找些资料,然后修改,测试。
分割帧的代码如下
//解码gif图片 public List<string> GetFrames(stringpPath,stringpSavedPath) { Image gif=Image.FromFile(pPath); FrameDimension fd=newFrameDimension(gif.FrameDimensionsList[0]); //获取帧数(gif图片可能包含多帧,其它格式图片一般仅一帧) intcount=gif.GetFrameCount(fd); List<string>gifList=newList<string>(); //以Jpeg格式保存各帧 for(inti=0;i<count;i++) { gif.SelectActiveFrame(fd,i); gif.Save(pSavedPath+"\\frame_"+i+".png",ImageFormat.Png); gifList.Add(pSavedPath+"\\frame_"+i+".png"); } returngifList; }
 
 
可以看到,返回了一个包含所有生成的帧地址的list列表。然后就是使用gifList作为参数来合并了。
 
//获取系统临时目录存放解码后的png图片\r\n stringtemppath=System.Environment.GetEnvironmentVariable("TEMP"); List<string>gifList=GetFrames(tBoxFile.Text,temppath); gifList.Reverse(); StringoutputFilePath="new.gif"; AnimatedGifEncoder ae=newAnimatedGifEncoder(); ae.Start(outputFilePath); ae.SetDelay(100); // 延迟间隔\r\n ae.SetRepeat(0); //-1:不循环,0:总是循环 播放 \r\n for(inti=0,count=gifList.Count;i<count;i++) { ae.AddFrame(Image.FromFile(gifList[i])); } ae.Finish(); MessageBox.Show("成功!新文件已保存在同目录");
 
 
这里面使用了AnimatedGifEncoder这个类,这是Gif.Components.dll动态连接库里的类(此库开源,文末给出地址),是我在codeProject上找到的。首先我把gifList反转,然后合并保存到同目录。中间生成的帧为了方便我保存到了temp目录。
本来这个库里是分割gif的功能的。但是我实际测试后发现效果非常差,图片黑条泛滥,根本没法看。所以还是使用上面那段代码,相关代码我依然保存在工程里,有兴趣可以自己测试。

C# GIF图片的分解以及合成的更多相关文章

  1. 小波分解和合成的simulink仿真

    采用5-3提升小波的方法 小波分解 数据拆分 预测 更新 数据输出使能电路 电路共有两个输入三个输出,in1是数据输入,in2是输入数据有效信号,out1是更新后的低频信号,out2是预测的高频信号, ...

  2. WPF图片拖拉变形、合成

    使用WPF的装饰器(Adorner)实现图片拖拉变形,DrawingVisual高保真合成图片.效果如下: 源码:https://gitee.com/orchis/ImageFotoMix.git

  3. openCV 视频分解及合成

    1. 视频分解 import cv2 # ************************** # 分解视频 cap=cv2.VideoCapture('1.mp4')#获取一个视频cap isOpe ...

  4. ChunkDisappearImage-一个以矩形为单位的图片消失分解效果

    效果 使用 1.将ChunkDisappearImage挂在一个空GameObject上. 2.将ChunkDisappearImage的Material设为ChunkDisappearImageMa ...

  5. 转《JavaScript中的图片处理与合成》

    引言: 本系列现在构思成以下4个部分: 基础类型图片处理技术之缩放.裁剪与旋转(传送门): 基础类型图片处理技术之图片合成(传送门): 基础类型图片处理技术之文字合成(传送门): 算法类型图片处理技术 ...

  6. php图文合成文字居中(png图片合成)

    header('Content-type:text/html;charset=utf-8'); /** * png图文合成 by wangzhaobo * @param string $pic_pat ...

  7. Quartz2D复习(一)--- 基础知识 / 绘制线段圆弧 / 图片水印 / 截图

    1.Quartz 2D是一个二维绘图引擎,同时支持ios和Mac系统: Quart2D的API是纯C语言的,API来自于Core  Graphics框架: 2.Quartz 2D可以绘制图形(线段/三 ...

  8. PHP简单图片操作

    <?php //PHP操作图片需打开配置文件中 extension=php_gd2.dll //================================================= ...

  9. 使用pillow生成分享图片

    重复性的工作一定要交给计算机去做! 有时候要为公司做一张宣传用的分享图片,很简单交给设计通过ps.AI做好就行了,但是如果一个网站要为每个用户生成一张专属的分享图片,如果让设计师一张一张的去做,哪设计 ...

随机推荐

  1. js 报错检查顺序

    如上图所示错误列表: 处理步骤:检查顺序应从最后到前,并且先检查当面页面引用的文件(公共引用文件一般不会出错的) 如:at.nt.query方法检查错误开始 倒推

  2. ASM - ByteCode插件下载、安装以及相关遇到的问题

    http://asm.ow2.org/eclipse/index.html http://download.forge.objectweb.org/eclipse-update/ http://for ...

  3. JAVA的get post 区别

    1. get 是从服务器上获取数据,post 是向服务器传送数据. get 请求返回 request - URI 所指出的任意信息.Post 请求用来发送电子邮件.新闻或发送能由交互用户填写的表格.这 ...

  4. 利用neon技术对矩阵旋转进行加速(2)

    上次介绍的是顺时针旋转90度,最近用到了180度和270度,在这里记录一下. 1.利用neon技术将矩阵顺时针旋转180度: 顺时针旋转180度比顺时针旋转90度容易很多,如下图 A1 A2 A3 A ...

  5. XToDo未完成内容标记管理器

    下载地址:https://github.com/trawor/XToDo 跟VVDocumenter规范注释生成器的安装方式一样: 下载开源工程在Xcode重新编译运行会自动安装此插件,重启Xcode ...

  6. Android学习之——ListView下拉刷新

    背景知识 ListView使用非常广泛,对于使用ListView的应用来说,下拉刷新是必不可少要实现的功能. 我们常用的微博.网易新闻,搜狐新闻都使用了这一功能,如下图所示.     微博 搜狐新闻 ...

  7. datatable编辑一行数据的方法

    let d =t.row($(e).parents("tr")).data(); 上面的是获取一行数据的方法,如果是更改一行数据,则传入根之前数据结构相同的对象或者数组即可: t. ...

  8. highcharts学习1----Line charts

    今天开始将之前使用的highcharts控件的经验进行总结和整理,一方面方便自己以后使用查询,同时也为正在学习的人们做一些指引,算是资源分享吧. 官网链接: http://www.highcharts ...

  9. 二维码生成:使用 JavaScript 库QRCode.js生成二维码

    QRCode.js:跨浏览器的javascript二维码生成库,支持html5的Canvas画布,没有任何依赖. Github 地址:https://github.com/davidshimjs/qr ...

  10. PHP日期知识

    (1)date用法: date(格式,[时间]);如果没有时间参数,则使用当前时间. 格式是一个字符串,其中以下字符有特殊意义:U 替换成从一个起始时间(好象是1970年1月1日)以来的秒数 Y 替换 ...