实现ASP.NET动态输出透明gif图片的方法
使用asp.net动态输出透明gif图片,也就是用Response.ContentType = "image/GIF"。 下面是测试代码: Code [http://www.xueit.com] // 存成gif.ashx % @ WebHandler Language = " C# " Class = " Gif " % using System.IO; using Sy
使用asp.net动态输出透明gif图片,也就是用Response.ContentType = "image/GIF"。
下面是测试代码:
Code [http://www.xueit.com]
//存成gif.ashx <%@ WebHandler Language="C#" Class="Gif" %> using System.IO; using System.Web; using System.Drawing; public class Gif : IHttpHandler { /// <summary> /// Returns a transparent background GIF image from the specified Bitmap. /// </summary> /// <param name="bitmap">The Bitmap to make transparent.</param> /// <param name="color">The Color to make transparent.</param> /// <returns>New Bitmap containing a transparent background gif.</returns> public Bitmap MakeTransparentGif(Bitmap bitmap, Color color) { byte R = color.R; byte G = color.G; byte B = color.B; MemoryStream fin = new MemoryStream(); bitmap.Save(fin, System.Drawing.Imaging.ImageFormat.Gif); MemoryStream fout = new MemoryStream((int)fin.Length); int count = 0; byte[] buf = new byte[256]; byte transparentIdx = 0; fin.Seek(0, SeekOrigin.Begin); //header count = fin.Read(buf, 0, 13); if ((buf[0] != 71) || (buf[1] != 73) || (buf[2] != 70)) return null; //GIF fout.Write(buf, 0, 13); int i = 0; if ((buf[10] & 0x80) > 0) { i = 1 << ((buf[10] & 7) 1) == 256 ? 256 : 0; } for (; i != 0; i--) { fin.Read(buf, 0, 3); if ((buf[0] == R) && (buf[1] == G) && (buf[2] == B)) { transparentIdx = (byte)(256 - i); } fout.Write(buf, 0, 3); } bool gcePresent = false; while (true) { fin.Read(buf, 0, 1); fout.Write(buf, 0, 1); if (buf[0] != 0x21) break; fin.Read(buf, 0, 1); fout.Write(buf, 0, 1); gcePresent = (buf[0] == 0xf9); while (true) { fin.Read(buf, 0, 1); fout.Write(buf, 0, 1); if (buf[0] == 0) break; count = buf[0]; if (fin.Read(buf, 0, count) != count) return null; if (gcePresent) { if (count == 4) { buf[0] |= 0x01; buf[3] = transparentIdx; } } fout.Write(buf, 0, count); } } while (count > 0) { count = fin.Read(buf, 0, 1); fout.Write(buf, 0, 1); } fin.Close(); fout.Flush(); return new Bitmap(fout); } public void ProcessRequest(HttpContext context) { Bitmap transGif = null; using (Bitmap bmp = new Bitmap(300, 50)) { using (Graphics g = Graphics.FromImage(bmp)) { g.Clear(Color.Gray); g.DrawString("transparent gif image", new Font("verdana bold", 14f), Brushes.LemonChiffon, 0f, 0f); bmp.MakeTransparent(Color.Gray); transGif = MakeTransparentGif(bmp, Color.Black); } } if (transGif != null) { context.Response.Clear(); context.Response.ContentType = "image/GIF"; transGif.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif); } } public bool IsReusable {get {return false;}} }
测试html文件如下
Code [http://www.xueit.com]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> </head> <body style="background:#999"> <img src="gif.ashx" style="position:absolute" />下方的文字 </body> </html>
精彩图集
精彩文章
热门标签
c语言知识点
location.hre
阻止冒泡
ProgressDial
java裁剪图片
一些用法
符号
站的
仿dedecms
Python异常处理
传递数据
dfs
position:fix
隐藏控件
Windows
常用方法
nextSibling
memcache扩展
自增号
硬盘使用
无参函数
阿里云
消息窗口
sink
Replica
链接类
选择法
竞争
将
c异或运算
屏幕锁定
金融
urldecode
ExpandableLi
所有进程
标准尺寸
连续元素
本周
语句练习
全文检索
greenlet
更新数据
新手入门
判断上传文件
路由失效
去除空格
swapoff
运行PHP
子序列
window.locat
指向
投影机
cmd窗口
实际
判定
simple_html_
文件 文件删除
format
创建图标
验证图片
赞助商链接
@CopyRight 2002-2008, 1SOHU.COM, Inc. All Rights Reserved QQ:1010969229

