zoukankan      html  css  js  c++  java
  • C#单的二维码生成

          最近做一个项目,要用到二维码。在网上也找一些相关的资料,并整理成一功能模块,在这里与大家分享下。若有不对之处,还请提出,并加以改正。谢谢!

    在这里的是第三方开源的插件。是谷歌的zxing.dll,在网上也可以自己搜索下载。也可以点击(下载  http://pan.baidu.com/s/1i3IGMih),都可以。

          这个类有两个方法,第一个方法只生成二维码( GetCreateQRCodeImg(string strURL, int intQRImgWigthAndHeight, int errorCorrect)),第二个方法生成插图二维码( GetCreateQRCodeInsertSmallImg(string strQRCodeContentURL,string strInsertSmallImgPath,int intQRCodeWidthAndHeigth,int errorCorrection)
    );  代码如下

       

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Web;
      5 using com.google.zxing;
      6 using ByteMatrix = com.google.zxing.common.ByteMatrix;
      7 using System.Collections;
      8 using System.Drawing;
      9 using System.IO;
     10 
     11 namespace QRCode
     12 {
     13     public class RQCodeClass
     14     {
     15 
     16         #region -生成二维码-
     17         /// <summary>
     18         /// 生成二维码图片
     19         /// </summary>
     20         /// <param name="strURL">传入内容需要生成的URL地址</param>
     21         /// <param name="intQRImgWigthAndHeight">矩形图片大小(wigth=height)</param>
     22         /// <param name="errorCorrect">容错值 1表示:L;2表示:M;3表示:Q;4表示:H(L--7%,M--15%,Q--25%,H--30%.) </param>
     23         /// <param name="multiFormatWriter">以参数的形式返回一个二维码对象</param>
     24         /// <returns>返回一个对象Bitmap</returns>
     25         private Bitmap GetCreateQRCodeImg(string strURL, int intQRImgWigthAndHeight, int errorCorrect, out MultiFormatWriter multiFormatWriter)
     26         {
     27             //生成二维码
     28             Hashtable hint = new Hashtable();
     29             hint.Add(EncodeHintType.CHARACTER_SET, "UTF-8");//添加一个编码
     30             //根据传入的容错值 来进行判断
     31             //L--7%,M--15%,Q--25%,H--30%.
     32             switch (errorCorrect)
     33             {
     34                 case 1://表示 L
     35                     hint.Add(EncodeHintType.ERROR_CORRECTION, com.google.zxing.qrcode.decoder.ErrorCorrectionLevel.L);
     36                     break;
     37                 case 2:
     38                     hint.Add(EncodeHintType.ERROR_CORRECTION, com.google.zxing.qrcode.decoder.ErrorCorrectionLevel.M);
     39                     break;
     40                 case 3:
     41                     hint.Add(EncodeHintType.ERROR_CORRECTION, com.google.zxing.qrcode.decoder.ErrorCorrectionLevel.Q);
     42                     break;
     43                 case 4:
     44                     hint.Add(EncodeHintType.ERROR_CORRECTION, com.google.zxing.qrcode.decoder.ErrorCorrectionLevel.H);
     45                     break;
     46                 default:
     47                     //没有该容错值
     48                     break;
     49             }
     50 
     51             MultiFormatWriter multiWriter = new MultiFormatWriter();
     52             //要在命名引用空间中 引用 using ByteMatrix=com.google.zxing.common.ByteMatrix;如不添加的话,multiWriter.encode()返回值类型,无法隐式转化。
     53             ByteMatrix bm = multiWriter.encode(strURL, com.google.zxing.BarcodeFormat.QR_CODE, intQRImgWigthAndHeight, intQRImgWigthAndHeight, hint);
     54 
     55             Bitmap img = bm.ToBitmap();//转化为二维码图;
     56             multiFormatWriter = multiWriter;//返回一个二维码对象;out
     57             return img;
     58         } 
     59 
     60          /// <summary>
     61         /// 生成二维码图片
     62         /// </summary>
     63         /// <param name="strURL">传入内容需要生成的URL地址</param>
     64         /// <param name="intQRImgWigthAndHeight">矩形图片大小(wigth=height)</param>
     65         /// <param name="errorCorrect">容错值 1表示:L;2表示:M;3表示:Q;4表示:H(L--7%,M--15%,Q--25%,H--30%.) </param>
     66         /// <param name="multiFormatWriter">以参数的形式返回一个二维码对象</param>
     67         /// <returns>返回一个对象Bitmap</returns>
     68         public Bitmap GetCreateQRCodeImg(string strURL, int intQRImgWigthAndHeight, int errorCorrect)
     69         {
     70             //生成二维码
     71             Hashtable hint = new Hashtable();
     72             hint.Add(EncodeHintType.CHARACTER_SET, "UTF-8");//添加一个编码
     73             //根据传入的容错值 来进行判断
     74             //L--7%,M--15%,Q--25%,H--30%.
     75             switch (errorCorrect)
     76             {
     77                 case 1://表示 L
     78                     hint.Add(EncodeHintType.ERROR_CORRECTION, com.google.zxing.qrcode.decoder.ErrorCorrectionLevel.L);
     79                     break;
     80                 case 2:
     81                     hint.Add(EncodeHintType.ERROR_CORRECTION, com.google.zxing.qrcode.decoder.ErrorCorrectionLevel.M);
     82                     break;
     83                 case 3:
     84                     hint.Add(EncodeHintType.ERROR_CORRECTION, com.google.zxing.qrcode.decoder.ErrorCorrectionLevel.Q);
     85                     break;
     86                 case 4:
     87                     hint.Add(EncodeHintType.ERROR_CORRECTION, com.google.zxing.qrcode.decoder.ErrorCorrectionLevel.H);
     88                     break;
     89                 default:
     90                     //没有该容错值
     91                     break;
     92             }
     93 
     94             MultiFormatWriter multiWriter = new MultiFormatWriter();
     95             //要在命名引用空间中 引用 using ByteMatrix=com.google.zxing.common.ByteMatrix;如不添加的话,multiWriter.encode()返回值类型,无法隐式转化。
     96             ByteMatrix bm = multiWriter.encode(strURL, com.google.zxing.BarcodeFormat.QR_CODE, intQRImgWigthAndHeight, intQRImgWigthAndHeight, hint);
     97 
     98             Bitmap img = bm.ToBitmap();//转化为二维码图;
     99             return img;
    100         } 
    101         #endregion
    102 
    103         /// <summary>
    104         /// 生成插图的二维码
    105         /// </summary>
    106         /// <param name="strQRCodeContentURL">需要生成URL的二维码</param>
    107         /// <param name="strInsertSmallImgPath">需要插入小图图片的路径</param>
    108         /// <param name="intQRCodeWidthAndHeigth">矩正的大小</param>
    109         /// <param name="errorCorrection">容错:1 表示:L ;2表示:M ; 3表示:Q;4表示:H (L--7%; M--15%;Q--25%;H--30%)</param>
    110         /// <returns></returns>
    111         public Bitmap GetCreateQRCodeInsertSmallImg(string strQRCodeContentURL,string strInsertSmallImgPath,int intQRCodeWidthAndHeigth,int errorCorrection) 
    112         {
    113             MultiFormatWriter multiWrtier = new MultiFormatWriter();//多元框架重写
    114     
    115             Bitmap bitmap=  GetCreateQRCodeImg(strQRCodeContentURL,intQRCodeWidthAndHeigth,errorCorrection,out multiWrtier);//生成二维码
    116             Bitmap bitmapInsertImg=  GetCreateInsertSmallImg(bitmap,multiWrtier,strInsertSmallImgPath,strQRCodeContentURL,intQRCodeWidthAndHeigth);//生成插图二维码
    117             //资源的释放
    118             bitmap.Dispose();
    119             return bitmapInsertImg;
    120         }
    121          
    122         /// 生成插图的二维码方法
    123         /// </summary>
    124         /// <param name="bitQRImg">二维码图片对象</param>
    125         /// <param name="multiWriter">多元框架读取</param>
    126         /// <param name="strInsertImgPath">插入图片的路径</param>
    127         /// <param name="strURL">需要生成二维码URL的内容</param>
    128         /// <param name="scale">比例大小</param>
    129         /// <param name="savePath">生成插图的二维码</param>
    130         private Bitmap GetCreateInsertSmallImg(Bitmap bitQRImg, MultiFormatWriter multiWriter, string strInsertImgPath, string strURL, int scale)
    131         {
    132             //读取需要小图的物理路径
    133             string Path = strInsertImgPath;
    134             FileStream _fs = new FileStream(Path, FileMode.Open);//打开数据流
    135             var middleImg = System.Drawing.Image.FromStream(_fs, true);//读取
    136 
    137             //计算插入图片的大小和位置
    138             //取二维码实际尺寸(去掉二维码两边空白处的实际尺寸)
    139             System.Drawing.Size rederSize = multiWriter.GetEncodeSize(strURL, com.google.zxing.BarcodeFormat.QR_CODE, scale, scale);
    140             int middleImgW = Math.Min((int)(rederSize.Width / 3.5), middleImg.Width);
    141             int middleImgH = Math.Min((int)(rederSize.Height / 3.5), middleImg.Height);
    142 
    143             int middleImgL = (bitQRImg.Width - middleImgW) / 2;
    144             int middleImgT = (bitQRImg.Height - middleImgH) / 2;
    145             //将img 转化为bmp 格式,否则无创建Graphic
    146             Bitmap bitMap = new Bitmap(bitQRImg.Width, bitQRImg.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
    147             using (Graphics g = Graphics.FromImage(bitMap))
    148             {
    149                 //并联插图片模式
    150                 g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
    151                 //呈现质量
    152                 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
    153                 //合成图像质量
    154                 g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
    155                 g.DrawImage(bitQRImg, 0, 0);//绘图
    156             }
    157             //在二维码中插入图片
    158             System.Drawing.Graphics myGraphics = Graphics.FromImage(bitMap);
    159 
    160             //填充一个矩形
    161             myGraphics.FillRectangle(Brushes.White, middleImgL, middleImgT, middleImgW, middleImgH);
    162             myGraphics.DrawImage(middleImg, middleImgL, middleImgT, middleImgW, middleImgH);
    163 
    164             //资源释放
    165             middleImg.Dispose();
    166             myGraphics.Dispose();
    167             return bitMap;
    168         }
    169     }
    170 }

       在这里调用就可以啊。

     1  //生成二维码 
     2             RQCodeClass rqClass = new RQCodeClass();
     3           
     4             Bitmap bitmap =  rqClass.GetCreateQRCodeImg("http://www.baidu.com",700,3);
     5             bitmap.Save(HttpRuntime.BinDirectory+"ggg.jpg");
     6             string strPath = HttpContext.Current.Server.MapPath("main_2.jpg");
     7             Bitmap insertImg= rqClass.GetCreateQRCodeInsertSmallImg("http://www.baidu.com",strPath,700,3);
     8             insertImg.Save(HttpRuntime.BinDirectory+"uu.jpg",System.Drawing.Imaging.ImageFormat.Jpeg);
     9 
    10             bitmap.Dispose();
    11             insertImg.Dispose();

           

  • 相关阅读:
    【人生】未来一段时间的规划
    java new一个对象的过程中发生了什么
    Openwrt missing dependencies for the following libraries:nf_nat.ko
    Lua日期转秒 时间函数os.time()和日期函数os.date()的使用
    lua 命令行参数
    Robot Framework自动化测试Telnet简单示例使用
    VirtualBox安装OpenWrt虚拟机
    C语言中负数的补码存储(1000 0000 表示128)
    Robot Framework自动化测试SSHLibrary简单示例使用
    dkjson实现lua空table编码为数组[]
  • 原文地址:https://www.cnblogs.com/LikeNeng/p/3904939.html
Copyright © 2011-2022 走看看