复制代码 代码如下:
 
//存成gif.ashx 
<%@ WebHandler Language="C#" %> 
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>The Bitmap to make transparent.</param> 
/// <param>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;}} 
} 
复制代码 代码如下:
 
<!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> 
<img src="gif.ashx" />下方的文字 
</body> 
</html> 
新闻热点
疑难解答
图片精选