.NET 二維碼生成(ThoughtWorks.QRCode)

jopen 9年前發布 | 92K 次閱讀 二維碼 條形碼/二維碼開發包

 

引用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、源代碼演示,相對復雜的生成方式:

界面效果:

.NET 二維碼生成(ThoughtWorks.QRCode)

前端代碼:

@{
  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);
}

源代碼演示下載: 點擊下載

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!