为gif动画添加水印-有具体实现[2008-02-15日更新]

更新:有了改善了性能的具体实现。速度提升几百倍

更新:早晨的版本在计算格帧之间时间延迟上有错误,现更正,纠正了动画变快或者变慢的问题

2007年,曾发过两篇解决为gif动画添加水印的文章,分别为:
给gif动画添加水印的初步实现
改善了性能的gif动画添加水印
当时,没有将完整的实现放上来,过去的一年中,陆陆续续的接到好多朋友的邮件,希望能发一份完整的实现,但由于移动硬盘毁坏,原来的代码已经找不到了,一直没能给大家一个很好的回复,深表歉意,现在将完整的程序重新实现了一遍,速度比较慢的,但思路基本有了,希望能给大家一个交待。
原图片:

水印后:


比去年版本的改进:
1)解决了各帧之间间隔变快的问题
未解决的问题
1)效率问题(2008-02-15已有更新,有了改善性能后的具体实现,速度提升几百倍
2)透明背景的处理

项目文件:
/Files/jillzhang/Gif.rar
改善性能后的具体实现:/Files/jillzhang/Gif_Faster.rar

更新:早晨的版本在计算格帧之间时间延迟上有错误,现更正,纠正了动画变快或者变慢的问题

纠正后版本:/Files/jillzhang/Gif_Faster_LastEdited.rar (最新 2008-02-15 17:49)

原来错误的将
int delay = ora_Img.GetPropertyItem(20736).Value[i]
其实ora_Img.GetPropertyItem(20736).Value获得的是1个byte[],这个数组中每四位代表1个delay值。
现已经更正为 int delay = BitConverter.ToInt32(buffer, i * 4);

作者:jillzhang
出处:http://jillzhang.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
Tag标签: gif水印
posted @ 2008-02-14 18:02 Robin Zhang 阅读(3739) 评论(36)  编辑 收藏 网摘 所属分类: asp.net

  回复  引用  查看    
#1楼 2008-02-14 18:08 | carysun      
我觉得透明的处理应该是比较重要的,如果水印很大的就影响原来的效果了
我用过iText对PDF进行过加水印,能满足一般的功能,gif的没弄过
  回复  引用    
#2楼 2008-02-14 18:18 | 奡 [未注册用户]
还是变快
  回复  引用  查看    
#3楼 [楼主]2008-02-14 19:21 | jillzhang      
@奡
不快了呀
@carysun
透明处理,我现在还没有思路,请指点一下
  回复  引用  查看    
#4楼 2008-02-14 21:56 | Kingthy      
看看先..
  回复  引用  查看    
#5楼 2008-02-14 22:08 | Kingthy      
刚试了.效率太低了哦

PS:你说的是将GIF图片弄成透明还是水印透明?
GIF图片透明的话在你还原某帧图像时使用GetHbitmap(Color color)这个重载方法设置透明背景色不可以吗?
水印图片透明就使用DrawImage中一个带ImageAttributes(在这里可以设置图像的透明度)参数的重载方法就可以了..
  回复  引用    
#6楼 2008-02-15 01:07 | 台州 [未注册用户]
GIF比较麻烦
  回复  引用  查看    
#7楼 2008-02-15 05:04 | fox23      
谢谢分享~
  回复  引用  查看    
#8楼 2008-02-15 07:49 | BlackCat      
mark
  回复  引用    
#9楼 2008-02-15 08:16 | zh_z [未注册用户]
谢谢您!试一下先
  回复  引用  查看    
#10楼 2008-02-15 08:38 | carysun      
@jillzhang
我用的是封装好的类
  回复  引用  查看    
#11楼 [楼主]2008-02-15 09:09 | jillzhang      
@Kingthy
@zh_z
2008-02-15已有更新,有了改善性能后的具体实现,速度提升几百倍
  回复  引用  查看    
#12楼 2008-02-15 09:59 | Wisdom-zh      
不错的实现
  回复  引用  查看    
#13楼 [楼主]2008-02-15 10:35 | jillzhang      
@Kingthy
GIF图片透明的话在你还原某帧图像时使用GetHbitmap(Color color)这个重载方法设置透明背景色不可以吗?
-------------------------------------------------------------
经测验,此方法无效
  回复  引用    
#14楼 2008-02-15 10:57 | xm [未注册用户]
速度还是不一样
  回复  引用  查看    
#15楼 2008-02-15 12:19 | Superstone      
透明的GIF图片.NET是做不出来的,反正我是没有搞出来过,PNG的倒是可以的。好像.NET2.0的FRAMEWORK不支持透明的GIF图像,还请了解的大大指教。
  回复  引用  查看    
#16楼 2008-02-15 15:38 | flank.chen      
恩.
  回复  引用  查看    
#18楼 [楼主]2008-02-15 17:53 | jillzhang      
@奡
@xm
速度的问题已经修正,多谢指点
  回复  引用  查看    
#19楼 [楼主]2008-02-15 17:56 | jillzhang      
目前,遗留的问题有
1)有些gif动画在水印后背景色变化
2)水印后gif文件体积增加较大
我想我以前对透明色的理解有误,实际上是背景色的问题。但仍然没有解决办法,望达人继续指点
  回复  引用    
#20楼 2008-02-15 22:27 | Laidz [未注册用户]
感谢博主
  回复  引用    
#21楼 2008-02-15 22:49 | laobing [未注册用户]
正是我想要的,搂主真是及时雨亚
多谢多谢
  回复  引用    
#22楼 2008-02-16 06:25 | 太感谢了! [未注册用户]
太感谢了!我找了一个通宵,在我快绝望的时候,发现了你!!!
  回复  引用    
#23楼 2008-02-16 06:50 | 太感谢了! [未注册用户]
能有一些相关说明文档或实例就好了,我们能更快的上手了!!

  回复  引用    
#24楼 2008-02-16 08:16 | imf [未注册用户]
我觉得应该还要把字体可以提供给我们选择,还有水印的位置等,这些参数让我们可以调整,那应该就很完善了!
  回复  引用  查看    
#25楼 [楼主]2008-02-16 09:34 | jillzhang      
@Laidz
@太感谢了!
不客气,互相学习
@imf
这些你可以自己更改。如果我做成那样,相反增加了难度,脱离了我的初衷,因为你说的那些是水印的范畴,而不是为gif动画水印的范畴

  回复  引用    
#26楼 2008-02-17 02:50 | wise_sandy [未注册用户]
感谢~
  回复  引用  查看    
#27楼 [楼主]2008-02-17 07:36 | jillzhang      
@wise_sandy
不客气
  回复  引用  查看    
#28楼 2008-02-17 11:42 | Edwin Liu      
关注
  回复  引用    
#29楼 2008-02-18 01:39 | imf [未注册用户]
哈,兄弟,我又来关注你一下了。。那些功能我都已能修改好了。再次感谢了。
不过有个问题,不知你能否帮解决?就是在添加文字的时候,可以为添加的文字进行描边?谢谢啦!!
  回复  引用  查看    
#30楼 [楼主]2008-02-19 20:57 | jillzhang      
@imf
对不起,这个我没有具体实现过
  回复  引用    
#31楼 2008-02-20 19:37 | imf [未注册用户]
我原来的思路是描绘二次,第一次是加粗体,第二次是正常体,可是,描绘二次后,对齐问题,所以,效果不好。。再者加粗产生的描边也是很细的!看到网上的资料,可以对文字进行描边。呵呵,可是GDI 俺是为了搞这个东东才开始看的,很难懂呀!拜托你看能不能帮我抽个空来改一下呢?谢谢!
  回复  引用  查看    
#32楼 2008-03-13 00:04 | →遇建←      
有收获,谢谢博主。
  回复  引用    
#33楼 2008-04-21 14:14 | 叶小 [未注册用户]
所有jif图片都变成了900多K啊,体积为什么变得那么大啊?
  回复  引用  查看    
#34楼 [楼主]2008-04-22 09:03 | jillzhang      
http://www.cnblogs.com/jillzhang/archive/2008/04/19/1128263.html
另外,水印后图像体积变大,是gif文件格式造成的,有的图片要完成水印效果,变大体积是必须的
  回复  引用  查看    
#35楼 2008-04-23 08:46 | xhxssj      
博主麻烦给份代码学习学习谢谢~~~~~~~~~~
  回复  引用    
#36楼 2008-05-05 11:49 | rebect [未注册用户]
jillzhang
给您发三次邮件了,就是不会,在这里留言吧~~
问个问题,我感觉你的组件很好用...先感谢了!
但有资源不释放的情况,就是每执行一次内存一直被占2-4M(我的图片大小160K),被大量调用的时候非常恐怖..........
我无法释放资源....您能给个办法吗??
  回复  引用  查看    
#37楼 2008-05-05 15:15 | jillzhang      
@rebect
不好意思,可能没太注意

你下载的版本太老了吧,试试这个
http://www.cnblogs.com/jillzhang/archive/2008/04/19/1128263.html


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-02-16 22:17 编辑过
Google站内搜索
[推荐职位]上海盛大网络招聘架构师



China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》

相关文章:


相关搜索:
gif水印

相关链接: