连续发表了几篇有关gif动画处理的文章,地址如下:
给gif动画添加水印的初步实现
改善了性能的gif动画添加水印
为gif动画添加水印-有具体实现[2008-02-15日更新]
生成Gif动画缩略图-Gif动画水印的改进
再发Gif动画水印
前面虽然解决了很多问题,但同时也都留下了许多有待解决的难题,本文于200年3月7日修正了以往文章中的如下问题:
1)修正了2007年3月5日发布的再发Gif动画水印中水印文字的颜色问题,在上个版本中,虽然也是根据调色板中的颜色来设置文字前景色的,可DrawString()之后,其实在对颜色编制索引的时候,颜色还是会有变化,这种变化会导致水印字的部分在调色板中找不到索引,所以字的颜色就很难得以控制,本文通过颜色近似比较,将水印后的图片中颜色均量化到调色板可表示的颜色范围之内,从此解决了水印字体颜色的问题。新的水印函数为:

/**//// <summary>
/// 对gif动画添加水印
/// </summary>
/// <param name="gifFilePath">原gif动画的路径</param>
/// <param name="text">水印文字</param>
/// <param name="textForceColor">水印文字的颜色,因为gif不是真彩色图片,所以在显示的时候,该颜色可能有所误差,但基本上可以确定颜色范围</param>
/// <param name="font">字体</param>
/// <param name="x">水印位置横坐标</param>
/// <param name="y">水印位置纵坐标</param>
/// <param name="outputPath">输出路径</param>
public void WaterMark(string gifFilePath, string text, Color textForceColor, Font font, float x, float y, string outputPath)
原图:
水印后效果:
在生成Gif动画缩略图-Gif动画水印的改进中一文中有对gif动画进行缩略的一个实现,那个实现主要是用codeproject上提供的NGif来完成的,不过它基于的是将对现有图片的颜色量化,非常容易出现背景变色,体积增大等问题,本文用一种新的思路取代了那种做法,我的想法是:我目前暂不针对给定几张png图片,让我生成gif动画这种的应用场景,我主要针对的是给我一张现在存在的gif动画,我能够对其水印,缩略。要实现这样的目的,我的基本思路就是保持该动画的调色板信息不变,编码的时候,整体布局也保持基本不变,变得只是我的需求影响到的部分。一幅图,如果经过缩略,它的有些像素是会发生改变的,这就使得很难再次利用调色板,我根据颜色抖动,将缩略中的颜色重新量化成调色板能表示,所以图片实质上会发生一些失真。但基本上视觉没有太大影响,可由此带来的好处就大大超过了害处,经过缩略的gif动画背景色不会更改,体积会成倍成倍的减小。缩略方法为:

/**//// <summary>
/// 获取gif动画的缩略图
/// </summary>
/// <param name="gifFilePath">原gif图片路径</param>
/// <param name="rate">缩放大小</param>
/// <param name="outputPath">缩略图大小</param>
public void GetThumbnail(string gifFilePath, double rate, string outputPath)
原图:
缩略后效果:
原图大小: 17.3KB ,缩略后大小:6.54KB
发现有些人将代码拷贝过去之后,马上将版权改成自己的名字,而且在网上肆意张贴,以后的版本不会直接提供文件下载,如果有需要朋友,只要是园子的注册用户,发邮件给我,我保准回复。这样也许可以为园子增加一些注册用户吧,我的email:jillzhang@126.com,再次声明,园子中兄弟有需要的,发邮件给我就可以了,由此带来的不便,还请兄弟们能理解。邮件中最好注明博客园ID和网址
今天是老婆的双重节日:生日和妇女节,祝愿老婆开开心心,越来越漂亮

一起的日子
同时祝园子中的女同胞节日快乐,:)
posted @ 2008-03-08 00:21
Robin Zhang 阅读(3616)
评论(122) 编辑 收藏 网摘 所属分类:
asp.net
发表评论
#102楼[
楼主]2008-03-08 10:07 |
@伍迷
:)
向你学习了.
正在学习中.
楼主发我一份.
谢谢.
:-),一直在看楼主的博客,学习中,不知道可否给我发一份,谢谢楼主啦!
震撼
楼主给我发一份
duml789@163.com
xpl-by@163.com
麻烦楼主也发一份给我学习学习,谢谢!
#114楼[
楼主]2008-03-08 12:59 |
@ArthurHend
多谢夸奖
@怪虎
@秋千
@Mercury
已发送
偶是 善良无用 ,发我一份吧,呵呵,感谢
zhq7857@tom.com
tangzehuan@126.com
确实不错,谢了
楼主你好,我试了一下生成缩略图,生成后的效果和缩小的比例有关,有的比例生成后gif的动画效果是完整的,有的比例生成以后,gif就出现掉帧的现象,造成动画不完整
注:我是用MemoryStream保存的重新编码以后的结果,不是用的FileStream
给我也发一个吧,学习...
taotao185@163.com
#120楼[
楼主]2008-03-08 15:54 |
@Jeffery Huang
实际上没有掉,用ie打开就可以显示了。
Jiangww_0924@163.com,学习下,谢谢~
#122楼[
楼主]2008-03-08 16:01 |
@Vincent Jiang
@天一生水
@盛天^-^
@wingoo
已发送
支持~!很好用
也给我份吧,ongbin@gmail.com
你好,能否也给我发一份,谢谢!chenzhitong@qq.com
#126楼[
楼主]2008-03-08 18:39 |
@ongbin
@亦续缘
已发
用Adobe ImageReady 打开.gif文件,然后直接往上面打上文字就行了。然后将优化结果存储为即可。
#129楼[
楼主]2008-03-08 20:08 |
@hoodlum1980
你说了一个绝对真理
请发一份给我谢谢!!!
zhaokeyong@126.com
真佩服,本人一向不怎么在网上发文章,不过兄弟你挺牛的
#133楼[
楼主]2008-03-08 20:52 |
@SPARON
已发送
@510282092
多谢支持
兄弟,这个加水印的代码给我发一个吧。
Email:ittang@yahoo.cn
superstone3@hotmail.com
我也要,学习一下。
嘿嘿,今天去玩了...现在送上祝福哈.等俺开始研究的时候,在向楼主要代码.(*^__^*) 嘻嘻……
#139楼[
楼主]2008-03-09 07:38 |
@iT tang
@Superstone
@Junstyle
已发
@airwolf2026
@老蒋
多谢支持
你好,能发份参考下吗 谢谢:)
niyanyang2007@163.com
@jillzhang
我是用IE打开的,不同比例生成的图片,效果不一样,有的后面调几帧,有的正常
jillzhang兄,我的web项目跑在IDC提供的虚拟空间上,可是他们的服务器上没有装上别的字体,可是我又想用别的字体,这个有什么办法能解决吗?
#146楼[
楼主]2008-03-09 11:16 |
@imf
那估计不行了,水印字体要服务器支持
#147楼[
楼主]2008-03-09 11:17 |
@Jeffery Huang
我在检查。
支持一下, 谢谢分享
edwin6#tom.com
#149楼[
楼主]2008-03-09 12:15 |
@Edwin Liu
已发送
能发份给我吗? 谢谢!!
liuyun_2006@qq.com
#152楼[
楼主]2008-03-09 21:31 |
@老钱
多谢支持
@Such Cloud
已发
给我一封源码吧,谢谢楼主啦.
magizer#126.com
thank you
bearyqb@163.com
一直在找这个,终于找到了,感谢LZ的辛勤劳动
烦您给我一份源码,不甚感谢
zrc000#gmail.com
“声讨盗用行为,加强版权教育!”
知识分子再没点良心,我们国家就完了:)!
支持楼主!
#157楼[
楼主]2008-03-10 10:33 |
@Howard Queen
你吓死我了,以为来这里声讨我来了呢,:)多谢支持
晚上回家发
给我来一份吧,谢谢了
邮箱:hehestudy@gmail.com
楼主给我发一份吧,谢谢了
邮箱: ybl_1987@126.com
#160楼[
楼主]2008-03-10 16:45 |
@杨瑞
晚上回家一并发
现在还有些bug,正在改,可能还需要1-2次改动,请关注
#161楼[
楼主]2008-03-10 20:17 |
@杨瑞
@Howard Queen
@平静中的疯狂
已发
#162楼[
楼主]2008-03-10 22:58 |
经过我的测试,我发现目前的LZW压缩算法在某个地方肯定存在问题,导致缩略的时候会发生丢帧。但现在我还没找出具体出在哪。
@jillzhang
我也不太明白,我大致看了一下代码,缩略的时候是把每一帧先解码出来,分别缩略了以后再编码,解码应该不会有什么问题,难道是重新编码有问题?
#164楼[
楼主]2008-03-12 14:33 |
@Jeffery Huang
经过我几天的努力,终于发现了问题所在。
的确是LZW压缩算法的问题,想偷点懒借用NGif上的LZWEncoder,没想到它靠不住,没办法自己重新写了一个,我测试了一下,没有出现问题,晚上回家放出纠正掉帧问题的版本。
@jillzhang
你的敬业和钻研精神太让我佩服了,呵呵,你做了一件伟大的事情
#166楼[
楼主]2008-03-12 14:37 |
@Jeffery Huang
呵呵,多谢支持了
#167楼[
楼主]2008-03-12 14:44 |
@Jeffery Huang
刚才msn可能点错了,没加上
@jillzhang
能否给份源代码,学习一下,谢了。
michaeljjf@126.com
@jillzhang
抱歉,我没有收到
麻烦重发一次,谢谢
zrc000@gmail.com
#172楼[
楼主]2008-03-12 14:58 |
@老蒋
@平静中的疯狂
晚上回家一起发
@平静中的疯狂
没听说过,北京有三种男人
1)国贸男人,会赚会花
2)三力屯男人,不会赚只会泡酒吧
3)中关村男人,会赚不会花的
所以,搞IT的,绝对是想好好过日子的女同学的首选
:)
#173楼[
楼主]2008-03-12 23:14 |
@老蒋
@平静中的疯狂
已发
目前项目正好用到,lz能否给份代码研究一下,谢谢!^_^
gys81@sina.com
@jillzhang
没有收到您发的邮件。试一下这几个邮箱行不行,谢了
michaeljjf@hotmail.com
michaeljjf@163.com
#176楼[
楼主]2008-03-13 13:38 |
@老蒋
michaeljjf@163.com
已发
楼主给我一份吧
ybl_1987@126.com
谢谢
现在正研究上传文件的东东,下一步就是添加水印了,麻烦给我一份学习吧,谢谢
tommy7830@163.com
你好,可以发一份给我吗?
qiji740@126.com
谢谢
您好,我想请教一个问题,如果我想在每一帧上印上不同的文字内容该怎么处理。我在foreach (Frame f in decoder.Frames)里添加了不同的水印,但是结果却是在第二帧的时候第一帧的水印还存在。
现在就是这样,第二帧还保留第一帧的水印,第三帧还保留有第一第二帧的水印,能不能去掉。。期待您的解答,谢谢
#183楼[
楼主]2008-03-27 23:29 |
注意LastImage变量,如果想实现你的需求,lastImage要设置为未添加水印时的图像
试了,好像还是不行,感觉在给第一帧写入水印的同时后面的几帧也被写入第一帧的水印~
#185楼[
楼主]2008-03-28 17:25 |
@李振波
可以的,你改代码该得有问题,肯定可以的
今天我又测试了一下代码,似乎是解码的问题。我分别保存了解码后的帧发现已经被优化过了。这张gif三个帧都是相同的图片,解码后第二帧和第三帧被优化成透明的点了,所以在上面印字就出现跟前面的帧重叠。后来我试了在一张每帧都不同图片的gif上印字发现不重叠印证了这一点。但我还是想解决这个问题,该怎么改解码里面的代码.
#187楼[
楼主]2008-04-02 17:25 |
发一份完整的给我行吗 谢谢了
chunmingwu@163.com
#191楼[
楼主]2008-04-21 09:16 |
谢谢站长,为你分享精神和助人精神喝彩, 方便的话 发给我一份 :)
chenmanqiu@sina.com 谢谢啊
#193楼[
楼主]2008-06-04 18:28 |
感谢楼主分享。希望能发一份完整的代码给我。fjfuqingxds@163.com 谢谢哦。
gif用Firework或IR透明处理后为何会出现前后帧重叠现象,不设为透明就不会出现些现象.
#198楼[
楼主]2008-09-04 20:10 |
@阳光1970
gif的透明处理是非常有难度的,涉及到很多图像以及颜色的算法,你的问题可能Firework软件也设计的不是够到位
虽然时间过去了那么久 但还是要顶一下楼主```希望给我份源码
xieyifei110@yahoo.com.cn
如果不麻烦,发一份,让我研究研究 :)
zhuyiming@foxmail.com