再次改进gif动画水印和缩略-节日版

连续发表了几篇有关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和网址

今天是老婆的双重节日:生日和妇女节,祝愿老婆开开心心,越来越漂亮

一起的日子


同时祝园子中的女同胞节日快乐,:)
作者:jillzhang
出处:http://jillzhang.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
Tag标签: Gif动画
posted @ 2008-03-08 00:21 Robin Zhang 阅读(3616) 评论(122)  编辑 收藏 网摘 所属分类: asp.net

评论共2页: 上一页 1 2 
  回复  引用  查看    
#101楼2008-03-08 10:00 | 伍迷      
祝你老婆生日节日和我那孩子他妈节日快乐:)
  回复  引用  查看    
#102楼[楼主]2008-03-08 10:07 | jillzhang      
@伍迷
:)

支持~
  回复  引用    
#104楼2008-03-08 11:09 | imf[未注册用户]
俺已收到源碼。。謝謝。。。
  回复  引用  查看    
#105楼2008-03-08 11:21 | 海浪空间      
向楼主学习
  回复  引用    
#106楼2008-03-08 11:25 | tmxkhd666[未注册用户]
向你学习了.
正在学习中.
楼主发我一份.
谢谢.

  回复  引用  查看    
#107楼2008-03-08 11:30 | 朱少平      
:-),一直在看楼主的博客,学习中,不知道可否给我发一份,谢谢楼主啦!
  回复  引用    
#108楼2008-03-08 11:41 | view[未注册用户]
发我一份!
  回复  引用  查看    
#109楼2008-03-08 12:03 | 朱少平      
:-),代码已经收到,学习中,谢谢楼主啦
  回复  引用  查看    
#110楼2008-03-08 12:03 | ArthurHend      
jillzhang的代码写得真好,注释很详细!
  回复  引用  查看    
#111楼2008-03-08 12:04 | 怪虎      
给我一份,谢谢..
oocn@163.com

  回复  引用  查看    
#112楼2008-03-08 12:28 | 秋千      
震撼
楼主给我发一份
duml789@163.com

  回复  引用  查看    
#113楼2008-03-08 12:38 | Mercury      
xpl-by@163.com
麻烦楼主也发一份给我学习学习,谢谢!

  回复  引用  查看    
#114楼[楼主]2008-03-08 12:59 | jillzhang      
@ArthurHend
多谢夸奖
@怪虎
@秋千
@Mercury
已发送

  回复  引用  查看    
#115楼2008-03-08 13:53 | wingoo      
yiminggw@163.com
多谢啦:)

  回复  引用  查看    
#116楼2008-03-08 13:54 | 间间单单      
偶是 善良无用 ,发我一份吧,呵呵,感谢
zhq7857@tom.com

  回复  引用  查看    
#117楼2008-03-08 14:14 | 盛天^-^      
tangzehuan@126.com
确实不错,谢了

  回复  引用  查看    
#118楼2008-03-08 14:58 | Jeffery Huang      
楼主你好,我试了一下生成缩略图,生成后的效果和缩小的比例有关,有的比例生成后gif的动画效果是完整的,有的比例生成以后,gif就出现掉帧的现象,造成动画不完整

注:我是用MemoryStream保存的重新编码以后的结果,不是用的FileStream

  回复  引用  查看    
#119楼2008-03-08 15:13 | 天一生水      
给我也发一个吧,学习...
taotao185@163.com

  回复  引用  查看    
#120楼[楼主]2008-03-08 15:54 | jillzhang      
@Jeffery Huang
实际上没有掉,用ie打开就可以显示了。

  回复  引用  查看    
#121楼2008-03-08 15:57 | Vincent Jiang‎      
Jiangww_0924@163.com,学习下,谢谢~
  回复  引用  查看    
#122楼[楼主]2008-03-08 16:01 | jillzhang      
@Vincent Jiang‎
@天一生水
@盛天^-^
@wingoo
已发送

  回复  引用  查看    
#123楼2008-03-08 17:45 | 李华星      
不错,支持
  回复  引用  查看    
#124楼2008-03-08 17:52 | ongbin      
支持~!很好用
也给我份吧,ongbin@gmail.com

  回复  引用  查看    
#125楼2008-03-08 18:23 | 亦续缘      
你好,能否也给我发一份,谢谢!chenzhitong@qq.com
  回复  引用  查看    
#126楼[楼主]2008-03-08 18:39 | jillzhang      
@ongbin
@亦续缘
已发

  回复  引用    
#127楼2008-03-08 19:04 | 李寻欢[未注册用户]
兄弟,这个加水印的代码给我发一个吧。

Email:tangdebing1127@126.com

博客园ID:http://www.cnblogs.com/tangdebing

  回复  引用  查看    
#128楼2008-03-08 19:43 | hoodlum1980      
用Adobe ImageReady 打开.gif文件,然后直接往上面打上文字就行了。然后将优化结果存储为即可。
  回复  引用  查看    
#129楼[楼主]2008-03-08 20:08 | jillzhang      
@hoodlum1980
你说了一个绝对真理

  回复  引用  查看    
#130楼2008-03-08 20:33 | 亦续缘      
已经收到文件,再次感谢!
  回复  引用  查看    
#131楼2008-03-08 20:42 | SPARON      
请发一份给我谢谢!!!
zhaokeyong@126.com

  回复  引用    
#132楼2008-03-08 20:49 | 510282092[未注册用户]
真佩服,本人一向不怎么在网上发文章,不过兄弟你挺牛的
  回复  引用  查看    
#133楼[楼主]2008-03-08 20:52 | jillzhang      
@SPARON
已发送
@510282092
多谢支持

  回复  引用    
#134楼2008-03-08 21:39 | iT tang[未注册用户]
兄弟,这个加水印的代码给我发一个吧。

Email:ittang@yahoo.cn

  回复  引用  查看    
#135楼2008-03-08 21:52 | 老蒋      
支持一下。。
  回复  引用  查看    
#136楼2008-03-08 23:02 | Superstone      
superstone3@hotmail.com
我也要,学习一下。

  回复  引用  查看    
#137楼2008-03-08 23:26 | airwolf2026      
嘿嘿,今天去玩了...现在送上祝福哈.等俺开始研究的时候,在向楼主要代码.(*^__^*) 嘻嘻……
  回复  引用  查看    
#138楼2008-03-09 00:53 | Junstyle      
给我发一份吧,谢谢!
  回复  引用  查看    
#139楼[楼主]2008-03-09 07:38 | jillzhang      
@iT tang
@Superstone
@Junstyle
已发


@airwolf2026
@老蒋
多谢支持

  回复  引用  查看    
#140楼2008-03-09 08:01 | 蓝色代码yiyuan      
你好,能发份参考下吗 谢谢:)
niyanyang2007@163.com

  回复  引用    
#141楼2008-03-09 10:38 | fit[未注册用户]
不错,顶一个
  回复  引用  查看    
#142楼2008-03-09 10:56 | Jeffery Huang      
@jillzhang
我是用IE打开的,不同比例生成的图片,效果不一样,有的后面调几帧,有的正常

  回复  引用    
#143楼2008-03-09 10:56 | sammyshao[未注册用户]
我也要一份.谢谢
  回复  引用  查看    
#144楼2008-03-09 11:02 | Jeffery Huang      



  回复  引用    
#145楼2008-03-09 11:04 | imf[未注册用户]
jillzhang兄,我的web项目跑在IDC提供的虚拟空间上,可是他们的服务器上没有装上别的字体,可是我又想用别的字体,这个有什么办法能解决吗?
  回复  引用  查看    
#146楼[楼主]2008-03-09 11:16 | jillzhang      
@imf
那估计不行了,水印字体要服务器支持

  回复  引用  查看    
#147楼[楼主]2008-03-09 11:17 | jillzhang      
@Jeffery Huang
我在检查。

  回复  引用  查看    
#148楼2008-03-09 11:24 | Edwin Liu      
支持一下, 谢谢分享
edwin6#tom.com

  回复  引用  查看    
#149楼[楼主]2008-03-09 12:15 | jillzhang      
@Edwin Liu
已发送

  回复  引用  查看    
#150楼2008-03-09 15:50 | 老钱      
很好,很支持,
  回复  引用  查看    
#151楼2008-03-09 21:14 | Such Cloud      
能发份给我吗? 谢谢!!
liuyun_2006@qq.com

  回复  引用  查看    
#152楼[楼主]2008-03-09 21:31 | jillzhang      
@老钱
多谢支持

@Such Cloud
已发

给我一封源码吧,谢谢楼主啦.
magizer#126.com

  回复  引用    
#154楼2008-03-10 08:32 | you_xia[未注册用户]
thank you
bearyqb@163.com

  回复  引用  查看    
#155楼2008-03-10 10:11 | 平静中的疯狂      
一直在找这个,终于找到了,感谢LZ的辛勤劳动
烦您给我一份源码,不甚感谢
zrc000#gmail.com

  回复  引用  查看    
#156楼2008-03-10 10:17 | Howard Queen      
“声讨盗用行为,加强版权教育!”
知识分子再没点良心,我们国家就完了:)!
支持楼主!

  回复  引用  查看    
#157楼[楼主]2008-03-10 10:33 | jillzhang      
@Howard Queen
你吓死我了,以为来这里声讨我来了呢,:)多谢支持
晚上回家发

  回复  引用    
#158楼2008-03-10 13:52 | hehestudy[未注册用户]
给我来一份吧,谢谢了
邮箱:hehestudy@gmail.com

  回复  引用    
#159楼2008-03-10 15:08 | 杨瑞[未注册用户]
楼主给我发一份吧,谢谢了
邮箱: ybl_1987@126.com

  回复  引用  查看    
#160楼[楼主]2008-03-10 16:45 | jillzhang      
@杨瑞
晚上回家一并发
现在还有些bug,正在改,可能还需要1-2次改动,请关注

  回复  引用  查看    
#161楼[楼主]2008-03-10 20:17 | jillzhang      
@杨瑞
@Howard Queen
@平静中的疯狂
已发

  回复  引用  查看    
#162楼[楼主]2008-03-10 22:58 | jillzhang      
经过我的测试,我发现目前的LZW压缩算法在某个地方肯定存在问题,导致缩略的时候会发生丢帧。但现在我还没找出具体出在哪。
  回复  引用  查看    
#163楼2008-03-11 07:38 | Jeffery Huang      
@jillzhang
我也不太明白,我大致看了一下代码,缩略的时候是把每一帧先解码出来,分别缩略了以后再编码,解码应该不会有什么问题,难道是重新编码有问题?

  回复  引用  查看    
#164楼[楼主]2008-03-12 14:33 | jillzhang      
@Jeffery Huang
经过我几天的努力,终于发现了问题所在。
的确是LZW压缩算法的问题,想偷点懒借用NGif上的LZWEncoder,没想到它靠不住,没办法自己重新写了一个,我测试了一下,没有出现问题,晚上回家放出纠正掉帧问题的版本。

  回复  引用  查看    
#165楼2008-03-12 14:36 | Jeffery Huang      
@jillzhang
你的敬业和钻研精神太让我佩服了,呵呵,你做了一件伟大的事情

  回复  引用  查看    
#166楼[楼主]2008-03-12 14:37 | jillzhang      
@Jeffery Huang
呵呵,多谢支持了

  回复  引用  查看    
#167楼[楼主]2008-03-12 14:44 | jillzhang      
@Jeffery Huang
刚才msn可能点错了,没加上

  回复  引用  查看    
#168楼2008-03-12 14:46 | Jeffery Huang      
@jillzhang
?

  回复  引用  查看    
#169楼2008-03-12 14:49 | 老蒋      
@jillzhang

能否给份源代码,学习一下,谢了。

michaeljjf@126.com

  回复  引用  查看    
#170楼2008-03-12 14:51 | 平静中的疯狂      
@jillzhang
抱歉,我没有收到
麻烦重发一次,谢谢
zrc000@gmail.com

  回复  引用  查看    
#171楼2008-03-12 14:54 | 平静中的疯狂      
突然 发觉搞计算机的好男人还真多:-)
  回复  引用  查看    
#172楼[楼主]2008-03-12 14:58 | jillzhang      
@老蒋
@平静中的疯狂
晚上回家一起发

@平静中的疯狂
没听说过,北京有三种男人
1)国贸男人,会赚会花
2)三力屯男人,不会赚只会泡酒吧
3)中关村男人,会赚不会花的
所以,搞IT的,绝对是想好好过日子的女同学的首选
:)

  回复  引用  查看    
#173楼[楼主]2008-03-12 23:14 | jillzhang      
@老蒋
@平静中的疯狂
已发

  回复  引用  查看    
#174楼2008-03-12 23:20 | lucifer      
目前项目正好用到,lz能否给份代码研究一下,谢谢!^_^
gys81@sina.com

  回复  引用  查看    
#175楼2008-03-13 12:15 | 老蒋      
@jillzhang

没有收到您发的邮件。试一下这几个邮箱行不行,谢了

michaeljjf@hotmail.com
michaeljjf@163.com

  回复  引用  查看    
#176楼[楼主]2008-03-13 13:38 | jillzhang      
@老蒋
michaeljjf@163.com
已发

  回复  引用  查看    
#177楼2008-03-13 17:15 | 杨本伦      
楼主给我一份吧
ybl_1987@126.com
谢谢

  回复  引用  查看    
#178楼2008-03-18 11:33 | 子扬's Blog      
给我一份谢谢

sczkq@126.com

  回复  引用    
#179楼2008-03-26 11:55 | redfox521[未注册用户]
现在正研究上传文件的东东,下一步就是添加水印了,麻烦给我一份学习吧,谢谢

tommy7830@163.com

  回复  引用    
#180楼2008-03-27 11:05 | 一天[未注册用户]
你好,可以发一份给我吗?
qiji740@126.com
谢谢

  回复  引用  查看    
#181楼2008-03-27 21:36 | 李振波      
您好,我想请教一个问题,如果我想在每一帧上印上不同的文字内容该怎么处理。我在foreach (Frame f in decoder.Frames)里添加了不同的水印,但是结果却是在第二帧的时候第一帧的水印还存在。
  回复  引用  查看    
#182楼2008-03-27 21:51 | 李振波      
现在就是这样,第二帧还保留第一帧的水印,第三帧还保留有第一第二帧的水印,能不能去掉。。期待您的解答,谢谢

  回复  引用  查看    
#183楼[楼主]2008-03-27 23:29 | jillzhang      
注意LastImage变量,如果想实现你的需求,lastImage要设置为未添加水印时的图像
  回复  引用  查看    
#184楼2008-03-28 17:15 | 李振波      
试了,好像还是不行,感觉在给第一帧写入水印的同时后面的几帧也被写入第一帧的水印~
  回复  引用  查看    
#185楼[楼主]2008-03-28 17:25 | jillzhang      
@李振波
可以的,你改代码该得有问题,肯定可以的

  回复  引用  查看    
#186楼2008-04-02 16:48 | 李振波      
今天我又测试了一下代码,似乎是解码的问题。我分别保存了解码后的帧发现已经被优化过了。这张gif三个帧都是相同的图片,解码后第二帧和第三帧被优化成透明的点了,所以在上面印字就出现跟前面的帧重叠。后来我试了在一张每帧都不同图片的gif上印字发现不重叠印证了这一点。但我还是想解决这个问题,该怎么改解码里面的代码.
  回复  引用  查看    
#187楼[楼主]2008-04-02 17:25 | jillzhang      
@李振波
你说的问题是源于DisposalMethod处置方法的,gif的第一帧图片大小代表了整个图像的背景大小,但以后的其他帧图像可能小于背景大小,而用位置和大小确定图像显示,这样可以有效的减小图片体积。
我的解码器解出来的图片是每帧得原图片,如果要添加水印,因为水印的位置是固定的,但因为上面的原因会造成有些帧图像在水印处并没有,这样水印就实现不了,所以在GifHelper中有个一个方法可以获得我们平时看到的gif图像每帧的图像,但这样就增大了图像体积。你可能用的是以前的代码,最新代码在http://www.cnblogs.com/jillzhang/archive/2008/03/28/1128263.html有介绍" target="_new">http://www.cnblogs.com/jillzhang/archive/2008/03/28/1128263.html有介绍,你可以下载份新的看看,可能对你的问题有所帮助。

  回复  引用  查看    
#188楼2008-04-02 22:28 | 李振波      
新代码没有这个问题了,谢谢~~
  回复  引用  查看    
#189楼2008-04-17 15:28 | wdx2008      
不错,留个记号,有空看~
  回复  引用    
#190楼2008-04-21 08:38 | 小小吴[未注册用户]
发一份完整的给我行吗 谢谢了

chunmingwu@163.com

  回复  引用    
#192楼2008-06-04 15:57 | 陈漫邱[未注册用户]
谢谢站长,为你分享精神和助人精神喝彩, 方便的话 发给我一份 :)
chenmanqiu@sina.com 谢谢啊

  回复  引用  查看    
#194楼2008-06-14 11:17 | XDS      
感谢楼主分享。希望能发一份完整的代码给我。fjfuqingxds@163.com 谢谢哦。

  回复  引用    
#195楼2008-06-23 22:25 | fengye912[未注册用户]
也给俺一份
  回复  引用    
#196楼2008-06-23 22:26 | fengye912[未注册用户]
也给俺一份 fengye912@163.com
  回复  引用    
#197楼2008-09-03 17:20 | 阳光1970[未注册用户]
gif用Firework或IR透明处理后为何会出现前后帧重叠现象,不设为透明就不会出现些现象.
  回复  引用  查看    
#198楼[楼主]2008-09-04 20:10 | jillzhang      
@阳光1970
gif的透明处理是非常有难度的,涉及到很多图像以及颜色的算法,你的问题可能Firework软件也设计的不是够到位

  回复  引用  查看    
#199楼2009-01-06 11:52 | 菠萝      
虽然时间过去了那么久 但还是要顶一下楼主```希望给我份源码
xieyifei110@yahoo.com.cn

  回复  引用  查看    
#200楼2009-04-02 13:53 | 华丽的空白      
如果不麻烦,发一份,让我研究研究 :)
zhuyiming@foxmail.com

评论共2页: 上一页 1 2 



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1095994




相关文章:

相关链接: