当前位置:编程学习 > C#/ASP.NET >>

C#给背景色透明的GIF动画加水印文字后背景色不能保持透明了??

如题,我已经实现了给GIF动画加水印文字的功能,但是如果对背景色透明的GIF动画进行操作,得到的GIF动画就有了难看的背景色,请问有什么解决的办法使处理前后的图片保持一致么,仅仅就是多了我的水印文字?

请热心人能解答得针对性强一些,不要一来就贴一大堆没说明的代码,谢谢各位!! --------------------编程问答-------------------- 参考
http://blog.csdn.net/zgke/archive/2008/11/28/3401077.aspx

你保存GIF的时候需要自己设置为透明 --------------------编程问答-------------------- 参考 --------------------编程问答-------------------- 补充一个问题:

我能不能不把加水印后的GIF动画保存到硬盘,而是直接输出流到aspx文件呢?

比如说:bitPhoto.Save(Response.OutputStream, ImageFormat.Gif); 

不知道该怎么操作,因为我不知道处理后的GIF动画还有没有bitmap 或者image 可以这样输出 --------------------编程问答-------------------- bitPhoto.Save(Response.OutputStream, ImageFormat.Gif); 
这样是可以的.. --------------------编程问答--------------------
引用 4 楼 zgke 的回复:
bitPhoto.Save(Response.OutputStream, ImageFormat.Gif);
这样是可以的..


那你知道怎么对GIF动画添加水印么,能不能给点代码我参考一下,我是网上找的别人的代码,但是写得好复杂,只知道用,好多东西看不懂,再就是GIF处理后的保存,似乎只能保存到硬盘再读出为流,能不能直接到内存中处理,不保存到硬盘呢? --------------------编程问答-------------------- --------------------编程问答-------------------- 怎么不在了 --------------------编程问答-------------------- 如果是动画的GIF 你需要修改保存的方法了. 如果只是透明处理直接使用Image就可以做到的 --------------------编程问答--------------------
引用 8 楼 zgke 的回复:
如果是动画的GIF 你需要修改保存的方法了. 如果只是透明处理直接使用Image就可以做到的


你有没有好的保存方法,介绍一下,或者来点代码,谢谢了! --------------------编程问答--------------------
引用 8 楼 zgke 的回复:
如果是动画的GIF 你需要修改保存的方法了. 如果只是透明处理直接使用Image就可以做到的




看一下对比图吧,不知道哪里不对,我是用你的方法直接转换保存的
ToImageGif(img).Save(Server.MapPath("img/test.gif")); --------------------编程问答-------------------- 原图本来就是背景色透明的,用你的方法一转换保存 就成这个粉红色背景的了,不知道为什么 --------------------编程问答--------------------

 Zgke.MyImage.ImageFile.ImageGif _Gif = new Zgke.MyImage.ImageFile.ImageGif(@"C:\hyzl.gif");


            List<Image> _ImageList = new List<Image>();
            for (int i = 0; i != _Gif.ImageCount; i++)
            {
                Image _SetImage = _Gif.GetImage(i);

                Bitmap _NewBitmap = new Bitmap(_SetImage.Width, _SetImage.Height);
                Graphics _Graphics = Graphics.FromImage(_NewBitmap);
                _Graphics.DrawImage(_SetImage, 0, 0);
                _Graphics.DrawString("A", this.Font, Brushes.Black, 0, 0);
                _Graphics.Dispose();
                _ImageList.Add(_NewBitmap);                
            }

            for (int i = 0; i != _ImageList.Count; i++)
            {
                _Gif.RemoveImage(0);
            }
            for (int i = 0; i != _ImageList.Count; i++)
            {
                _Gif.AddImage(_ImageList[i], 15, false, Zgke.MyImage.ImageFile.ImageGif.DisposalMethod.RestoreBackgroundColor);
            }

            _Gif.SaveFile(@"C:\1.gif");






用到的类
http://blog.csdn.net/zgke/archive/2009/01/06/3721389.aspx
--------------------编程问答--------------------
引用 12 楼 zgke 的回复:
C# code
 Zgke.MyImage.ImageFile.ImageGif _Gif=new Zgke.MyImage.ImageFile.ImageGif(@"C:\hyzl.gif");


            List<Image> _ImageList=new List<Image>();for (int i=0; i!= _Gif.ImageCount; i++)
            {
                Image _SetImage= _Gif.GetImage(i);

                Bitmap _NewBitmap=new Bitmap(_SetImage.Width, _SetImage.Height);
                Graphics _Graphics= Graphics.FromImage(_NewBitmap);
                _Graphics.DrawImage(_SetImage,0,0);
                _Graphics.DrawString("A",this.Font, Brushes.Black,0,0);
                _Graphics.Dispose();
                _ImageList.Add(_NewBitmap);                
            }for (int i=0; i!= _ImageList.Count; i++)
            {
                _Gif.RemoveImage(0);
            }for (int i=0; i!= _ImageList.Count; i++)
            {
                _Gif.AddImage(_ImageList[i],15,false, Zgke.MyImage.ImageFile.ImageGif.DisposalMethod.RestoreBackgroundColor);
            }

            _Gif.SaveFile(@"C:\1.gif");





用到的类
http://blog.csdn.net/zgke/archive/2009/01/06/3721389.aspx



可以把图片的质量控制一下么,处理后图片模糊了好多哦?? --------------------编程问答-------------------- ToImageGif 的方法里 把你取到的色彩表放到Image里..  --------------------编程问答-------------------- 手动设置下透明值吧 --------------------编程问答--------------------
引用 15 楼 vieri122 的回复:
手动设置下透明值吧


 Graphics.Clear(Color.Transparent); 

是这样么,可是这样处理出来的图片是黑色一片啊? --------------------编程问答--------------------
引用 14 楼 zgke 的回复:
ToImageGif 的方法里 把你取到的色彩表放到Image里..


我不是太懂你说的做法,刚刚接触这个。

还有就是,我发现如果用你的方法处理背景不透明的GIF,得到的图像反而严重失真,丢失色彩,或者可以说第一帧以后的帧都看不清了,有什么办法可以判断要处理的GIF是否是背景透明的呢?从而选择不同的处理方法 --------------------编程问答-------------------- 再來几個高手吧 --------------------编程问答-------------------- 幫頂 --------------------编程问答-------------------- [img=http://www.coudoudou.com/showvipcount.aspx?id=55203][/img]

看看這個吧,似乎就是給動態GIF加數字水印后輸出的效果,可以做計數器

但我的處理效果不行 --------------------编程问答-------------------- 继续等待,帮顶有分 --------------------编程问答-------------------- 关注 --------------------编程问答-------------------- 饭前一顶 --------------------编程问答-------------------- gif类非常强大,学习了,但似乎在gif类里没有看见质量控制的语句,你参考一下吧:
Graphics picture = Graphics.FromImage(img);
picture.SmoothingMode = SmoothingMode.HighQuality;
picture.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
picture.CompositingQuality = CompositingQuality.HighQuality; --------------------编程问答-------------------- 学习了  这个是我自己做的 gif水印  logo在线生成 http://www.zlinkz.com/Tool_creatLogo.aspx
写在我的网站上了
友情链接交换
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,