asp.net生成透明GIF图片的方法
首先呢,我们准备一个PLMM,嘿嘿:
大家看到PLMM帽子边上的那个黄色圆圈了吗?一会我们就要将它变成透明的,生成一张可以在IE6中透明的GIF图。
首先呢,我们使用常规方式:
1
Dim gif1 As New Bitmap("plmm.jpg")
2
gif1.MakeTransparent(Color.Yellow)
3
PictureBox1.Image = gif1
4
5
'这里我将它保存为gif到流里,这里是内存流,在asp.net中则是outputstream ,再显示在picturebox2里
6
Dim ms As New System.IO.MemoryStream()
7
gif1.Save(ms, Imaging.ImageFormat.Gif)
8
9
Dim gif2 = Bitmap.FromStream(ms)
10
ms.Dispose()
11
12
PictureBox2.Image = gif2
13
14
'***变黑了****
这个结果是十分令人沮丧的:那个圆圈非但没透明,甚至还变成了黑色:

那么如果我直接保存为文件呢?图我就不贴了,和上面一样,还是黑的。
Dim gif1 As New Bitmap("plmm.jpg")2
gif1.MakeTransparent(Color.Yellow)3
PictureBox1.Image = gif14

5
'***直接保存为文件:***6
gif1.Save("out1.gif", Imaging.ImageFormat.Gif)7

8
'***还是黑的**********9
PictureBox2.ImageLocation = "out1.gif"
这是我网上进行了一番搜索,大致上可以搜到这么一个版本:先修改调色板,然后再另外拷贝数据。
大致原理是:GIF是一种索引图像,最大色彩数256色 (PS:其实这个色彩数不少了,想当年,我上学时候经常逃课去玩
世嘉五代 MD游戏机,那个同屏发色数才16色,同期的超级任天堂的同屏发色数也不过256色,呵呵,这些都是从<<电子游戏软件>>里看来的)
GIF有一个调色板,最大有256个颜色索引,然后每个像素保存的是调色板的颜色索引值。故此,只需修改调色板,即可调整
图像的颜色。
OK,那么我们来改下调色板:
'***我们读取上一步生成的不透明gif2
Dim gif As New Bitmap("out1.gif")3
PictureBox1.Image = gif4

5
'***获取色板***6
Dim pal = gif.Palette7

8
For i As Integer = 0 To pal.Entries.Length - 19
Dim color = pal.Entries(i)10
'***将黑色改为透明,并且玩个反色特效,嘿嘿***11
If color.R = 0 And color.G = 0 And color.B = 0 Then12
pal.Entries(i) = color.Transparent13
Else14
pal.Entries(i) = color.FromArgb(255, color.B, color.G, color.R)15
End If16

17
Next18

19
Dim gif2 As Bitmap = gif.Clone()20
gif2.Palette = pal21

22
PictureBox2.Image = gif2
结果如图:
看起来效果不错,纯黑色部分被透明了!而且么,还出来个反色特效,HOHO
不过你不要高兴得太早,如果这时候你保存的话,它还是黑的!!

