zoukankan      html  css  js  c++  java
  • .NET 二维码生成(ThoughtWorks.QRCode)【转发jiangys】

    .NET 二维码生成(ThoughtWorks.QRCode)

    2015-06-21 22:19 by jiangys, 3790 阅读, 8 评论, 收藏编辑

    引用ThoughtWorks.QRCode.dll (源代码里有)

    1、简单二维码生成及解码代码:

    复制代码
            //生成二维码方法一
            private void CreateCode_Simple(string nr)
            {
                QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
                qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
                qrCodeEncoder.QRCodeScale = 4;
                qrCodeEncoder.QRCodeVersion = 8;
                qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
                //System.Drawing.Image image = qrCodeEncoder.Encode("4408810820 深圳-广州 小江");
                System.Drawing.Image image = qrCodeEncoder.Encode(nr);
                string filename = DateTime.Now.ToString("yyyymmddhhmmssfff").ToString() + ".jpg";
                string filepath = Server.MapPath(@"~Upload") + "\" + filename;
                System.IO.FileStream fs = new System.IO.FileStream(filepath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write);
                image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
    
                fs.Close();
                image.Dispose();
                //二维码解码
                var codeDecoder = CodeDecoder(filepath);
            }
    
            /// <summary>
            /// 二维码解码
            /// </summary>
            /// <param name="filePath">图片路径</param>
            /// <returns></returns>
            public string CodeDecoder(string filePath)
            {
                if (!System.IO.File.Exists(filePath))
                    return null;
                Bitmap myBitmap = new Bitmap(Image.FromFile(filePath));
                QRCodeDecoder decoder = new QRCodeDecoder();
                string decodedString = decoder.decode(new QRCodeBitmapImage(myBitmap));
                return decodedString;
            }
    复制代码

    2、源代码演示,相对复杂的生成方式:

    界面效果:

    前端代码:

    复制代码
    @{
        Layout = null;
    }
    
    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Code</title>
        <script src="~/Scripts/jquery-1.10.2.js"></script>
        <script type="text/javascript">
            $(function () {
                $("#createCode").click(function () {
                    var strData = $("#strData").val();
                    var level = $("#level").val();
                    var encoding = $("#encoding").val();
                    var version = $("#version").val();
                    var scale = $("#scale").val();
    
                    $.post("/home/CreateCode_Choose", { strData: strData, level: level, qrEncoding: encoding, version: version, scale: scale }, function (data) {
                        $("img").attr("src", data);
                    });
                });
    
            });
    
        </script>
    </head>
    <body>
        <div>
            <p>要生成的文字(支持中文):<input id="strData" type="text" value="123456 测试" /></p>
            <p>
                Encoding:<select id="encoding">
                    <option value="Byte">Byte</option>
                    <option value="AlphaNumeric">AlphaNumeric</option>
                    <option value="Numeric">Numeric</option>
                </select>
    
            </p>
            <p>
                Correction Level:<select id="level">
                    <option value="M">M</option>
                    <option value="L">L</option>
                    <option value="Q">Q</option>
                    <option value="H">H</option>
                </select>
            </p>
            <p>Version:<input id="version" type="text" value="8" /></p>
            <p>scale:<input id="scale" type="text" value="4" /></p>
            <img src="" alt="" />
            <input id="createCode" type="button" value="生成" />
        </div>
    </body>
    </html>
    复制代码

    后台:

    复制代码
            /// 生成二维码
            /// </summary>
            /// <param name="strData">要生成的文字或者数字,支持中文。如: "4408810820 深圳-广州" 或者:4444444444</param>
            /// <param name="qrEncoding">三种尺寸:BYTE ,ALPHA_NUMERIC,NUMERIC</param>
            /// <param name="level">大小:L M Q H</param>
            /// <param name="version">版本:如 8</param>
            /// <param name="scale">比例:如 4</param>
            /// <returns></returns>
            public ActionResult CreateCode_Choose(string strData, string qrEncoding, string level, int version, int scale)
            {
                QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
                string encoding = qrEncoding;
                switch (encoding)
                {
                    case "Byte":
                        qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
                        break;
                    case "AlphaNumeric":
                        qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.ALPHA_NUMERIC;
                        break;
                    case "Numeric":
                        qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.NUMERIC;
                        break;
                    default:
                        qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
                        break;
                }
    
                qrCodeEncoder.QRCodeScale = scale;
                qrCodeEncoder.QRCodeVersion = version;
                switch (level)
                {
                    case "L":
                        qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;
                        break;
                    case "M":
                        qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
                        break;
                    case "Q":
                        qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.Q;
                        break;
                    default:
                        qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;
                        break;
                }
                //文字生成图片
                Image image = qrCodeEncoder.Encode(strData);
                string filename = DateTime.Now.ToString("yyyymmddhhmmssfff").ToString() + ".jpg";
                string filepath = Server.MapPath(@"~Upload") + "\" + filename;
                //如果文件夹不存在,则创建
                //if (!Directory.Exists(filepath))
                //    Directory.CreateDirectory(filepath);
                System.IO.FileStream fs = new System.IO.FileStream(filepath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write);
                image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
                fs.Close();
                image.Dispose();
                return Content(@"/Upload/" + filename);
            }
    复制代码
  • 相关阅读:
    iOS 沙盒机制 持久存储 读写文件 NSFileManager
    关键字@synchronized
    整理UIImagePickerController、保存图片到相册问题
    关于MJRefresh的下拉加载数据bug
    tableView显示第一个cell有偏移问题
    iOS比较常用的第三方框架
    iOS 10 下的用户隐私访问相册等权限问题!
    diff: /../Podfile.lock: No such file or directory diff: /Manifest.lock: No such file or directory error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods in
    iOS的坑:ERRORITMS-90096: "Your binary is not optimized for iPhone 5
    CocoaPods 1.0之前版本无法pod install和pod update! 更新后CocoaPods 1.1.1 Podfile新的写法.
  • 原文地址:https://www.cnblogs.com/937522zy/p/4997599.html
Copyright © 2011-2022 走看看