zoukankan      html  css  js  c++  java
  • 微信二维码名片生成示例【转】

    二维码的对于现在已经很流行了,主要是因为其大数据量和容错能力。出于爱好,学了下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 =  "我是逆世狂神 我的百度Hi:http://hi.baidu.com/yunanwu 我的微博: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;  
             
             
             
           }

    扫扫我的二维码名片吧:

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

  • 相关阅读:
    JAVA深入研究——Method的Invoke方法。
    java String->float,float->int
    Java中Object转化为int类型
    Android使用SeekBar
    转: 最值得阅读学习的 10 个 C 语言开源项目代码
    Eclipse快捷键列表大全
    Android使用的Eclipse NDK开发较详细一篇文章
    rm 删除带空格的文件或者目录
    man命令中的文本操作
    androidSDK无法更新的解决方法之一
  • 原文地址:https://www.cnblogs.com/fx2008/p/4233096.html
Copyright © 2011-2022 走看看