zoukankan      html  css  js  c++  java
  • C#实现GIF图片反转

    首先看下效果图:

    然后是两张gif的对比
       //原本图是正着走的
       //处理后是倒着走的

    gif是动态的嘛。然后我昨天和一个朋友聊天的时候发了一串相同的gif图,然后看着千篇一律的东西。我想能不能写个程序实现gif的初始状态不同呢。什么意思呢。我们知道,gif是由帧构成的,我想实现的功能是比如一个gif共有十帧,那么我写出来的程序能够生成10个gif文件,分别对应不同的初始状态来进行循环。后来一想,gif帧太多的话,比较慢,而且也不实用,于是决定简化一下,只做一个反转工具,比如一个gif是从左到右播放的,通过这个成功可以生成一个相同的gif图,不过是倒着播放的。

    思路很简单,就是先把gif分解成很多帧,然后对帧进行合并,合并帧之前把帧的位置反转一下就可以了。因为我自己对图像处理的知识不懂,只想到了思路,所以这些功能都要找些资料,然后修改,测试。

    分割帧的代码如下

    可以看到,返回了一个包含所有生成的帧地址的list列表。然后就是使用gifList作为参数来合并了。

    这里面使用了AnimatedGifEncoder这个类,这是Gif.Components.dll动态连接库里的类(此库开源,文末给出地址),是我在codeProject上找到的。首先我把gifList反转,然后合并保存到同目录。中间生成的帧为了方便我保存到了temp目录。

    本来这个库里是分割gif的功能的。但是我实际测试后发现效果非常差,图片黑条泛滥,根本没法看。所以还是使用上面那段代码,相关代码我依然保存在工程里,有兴趣可以自己测试。

    项目源码:gif反转工具

    参考:

    C#图片处理:获取GIF 动画图片中的各个帧
    NGif, Animated GIF Encoder for .NET

  • 相关阅读:
    Python初学者第十天 集合、十六进制
    Python初学者第九天 字符串、列表、字典练习
    Python初学者第八天 元组和字典
    Python初学者第七天 字符串及简单操作
    Python初学者第六天 列表操作练习
    Python初学者第五天 列表及简单操作
    Python初学者第四天 二进制运转换
    Python初学者第三天 运算符、while循环
    Python初学者第二天 用户输入和注释
    Python初学者第一天 Python安装及第一个Python程序
  • 原文地址:https://www.cnblogs.com/lazycoding/p/2551019.html
Copyright © 2011-2022 走看看