码迷,mamicode.com
首页 > 微信 > 详细

微信二维码名片生成示例【转】

时间:2015-01-19 10:42:07      阅读:475      评论:0      收藏:0      [点我收藏+]

标签:

二维码的对于现在已经很流行了,主要是因为其大数据量和容错能力。出于爱好,学了下google的zxing对二维码的处理。

首先生成一张二维码的话,只要输入文本就OK了。

下面是加密的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
protected void btnEncode_Click(object sender, EventArgs e)  
       {  
          
           try
           {  
               //要生成二维码的文本。  
               string content =  "我是逆世狂神\r\n我的百度Hi:http://hi.baidu.com/yunanwu\r\n我的微博:http://weibo.com/wuyunnan";  
               //二维码图片保存路径  
               string file = AppDomain.CurrentDomain.BaseDirectory + "test.png";  
               //防止中文乱码,如果此处不进行设置,可以修改源文件(zxing库是开源项目)
               /*源代码中有两处UTF-8的问题,会导致乱码,
                  其一:com.google.zxing.qrcode.encoder.encoder类中的
                  internal const System.String DEFAULT_BYTE_MODE_ENCODING = "ISO-8859-1";
                  此处,将ISO-8859-1改为UTF-8
                  其二:com.google.zxing.qrcode.decoder.DecodedBitStreamParser类的成员
                  private const System.String UTF8 = "UTF8";
                  应将UTF8改为UTF-8
               */  
               Hashtable hst = new Hashtable();  
               hst.Add(EncodeHintType.CHARACTER_SET, "UTF-8");  
               //encode为重载方法,如果不设置Hashtable,则可能会导致中文乱码  
               zxing.ByteMatrix byteMatrix = new MultiFormatWriter().encode(content,   
                   BarcodeFormat.QR_CODE, 350, 350,hst);  
               //写入到文件  
               writeToFile(byteMatrix, System.Drawing.Imaging.ImageFormat.Png, file);   
               //添加头像  
                addImg(file); 
               //显示到前台  
               img.InnerHtml += "<img width=‘256px‘ src=‘test.png‘ id=‘imgTest‘ />";  
          
           }  
           catch (Exception ex)  
           {  
               Response.Write(ex.Message);  
           }  
       }  
          
          
public void writeToFile(zxing.ByteMatrix matrix, System.Drawing.Imaging.ImageFormat format, string file)  
       {  
           //生成图片  
           Bitmap bmap = toBitmap(matrix);  
           //保存图片  
           bmap.Save(file, format);  
       }  
          
       public Bitmap toBitmap(zxing.ByteMatrix matrix)  
       {  
           //图片宽度和高度  
           int width = matrix.Width;  
           int height = matrix.Height;  
           //实例化一张图片(最后的参数是指定图片的像素格式)  
           Bitmap bmap = new Bitmap(width, height,System.Drawing.Imaging.PixelFormat.Format32bppArgb);  
           //循环渲染每个像素  
           for (int x = 0; x < width; x++)  
           {  
               for (int y = 0; y < height; y++)  
               {  
                   bmap.SetPixel(x, y, matrix.get_Renamed(x, y) != -1 ? ColorTranslator.FromHtml("0xFF000000") : ColorTranslator.FromHtml("0xFFFFFFFF"));  
               }  
           }  
           return bmap;  
       }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//   添加头像  
       /*添加头像的方法主要原理也是添加水印的原理*/
       public string addImg(string file)  
       {  
           System.Drawing.Image img = System.Drawing.Image.FromFile(file);  
           System.Drawing.Image img2 = System.Drawing.Image.FromFile(  
               AppDomain.CurrentDomain.BaseDirectory + "1.jpg");  
           Graphics g = Graphics.FromImage(img);  
           g.DrawImage(img2, 140, 140, 64, 64);  
           string name = Server.MapPath("\\new\\" + Path.GetFileName(file));  
           img.Save(name);  //保存带头像的二维码图片
           g.Dispose();  
           img.Dispose();  
           img2.Dispose();  
           File.Delete(file);//删除旧二维码  
           return name; //返回新的二维码图片路径 
       }

 

下面是解析的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
protected void btnDecode_Click(object sender, EventArgs e)  
       {  
           //保存上传的文件  
           string name = AppDomain.CurrentDomain.BaseDirectory + "\\upload\\" + FileUpload1.FileName + ".png";  
           FileUpload1.SaveAs(name);  
           //读取图片  
           System.Drawing.Image img = System.Drawing.Image.FromFile(name);  
           Bitmap bmap;  
           try
           {  
               bmap = new Bitmap(img);  
           }  
           catch (System.IO.IOException ioe)  
           {  
         
               Response.Write(ioe.ToString());  
               return;  
           }  
           if (bmap == null)  
           {  
         
               Response.Write("无法进行解码");  
               return;  
           }  
           //解码二维码  
           LuminanceSource source = new RGBLuminanceSource(bmap, bmap.Width, bmap.Height);  
           com.google.zxing.BinaryBitmap bitmap = new com.google.zxing.BinaryBitmap(new zxing.HybridBinarizer(source));  
           Result result;//保存解码结果  
           try
           {  
               result = new MultiFormatReader().decode(bitmap);  
           }  
           catch (ReaderException re)  
           {  
               this.txtContext.Text = re.ToString(); 
               return;  
           }  
           txtContext.Text =result.Text;  
         
         
         
       }

扫扫我的二维码名片吧:

技术分享

 

此处添加头像的代码是直接重画图片,其实也就是添加水印的原理,如果有更好的方法请赐教...

 

微信二维码名片生成示例【转】

标签:

原文地址:http://www.cnblogs.com/steven9801/p/4233096.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!