生成二维码--支持中文,web和winform均可调用

9 篇文章 0 订阅
4 篇文章 0 订阅

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.IO;
using System.Text.RegularExpressions;

using ThoughtWorks.QRCode.Codec;
using ThoughtWorks.QRCode.Codec.Data;
using ThoughtWorks.QRCode.Codec.Util;

namespace Demo
{

    public class QRCodes
    {
        public static Bitmap GenerateCode(EnCode encoding, ErrorCorrect errorCorrect, int scale, int version, string encodeData, out string errMsg)
        {
            Bitmap image = null;
            errMsg = string.Empty;

            if (string.IsNullOrEmpty(encodeData))
            {
                errMsg = "输入二维码数据不能为空!";
                return image;
            }

            QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();

            if (encoding == EnCode.Byte)
            {
                qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
            }
            else if (encoding == EnCode.AlphaNumeric)
            {
                qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.ALPHA_NUMERIC;
            }
            else if (encoding == EnCode.Numeric)
            {
                qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.NUMERIC;
            }

            if (errorCorrect == ErrorCorrect.L)
            {
                qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;
            }
            else if (errorCorrect == ErrorCorrect.M)
            {
                qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
            }
            else if (errorCorrect == ErrorCorrect.Q)
            {
                qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.Q;
            }
            else if (errorCorrect == ErrorCorrect.H)
            {
                qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H;
            }

            qrCodeEncoder.QRCodeVersion = version;
            qrCodeEncoder.QRCodeScale = scale;

            if (QRCodeUtility.IsUniCode(encodeData))
            {
                image = qrCodeEncoder.Encode(encodeData, Encoding.GetEncoding("gb2312"));
            }
            else
            {
                image = qrCodeEncoder.Encode(encodeData, Encoding.ASCII);
            }
           
            return image;
        }

        public static Bitmap GenerateCode(EnCode encoding, ErrorCorrect errorCorrect, int scale, int version, string encodeData, string filePath, out string errMsg)
        {
            errMsg = string.Empty;
            Bitmap image = GenerateCode(encoding, errorCorrect, scale, version, encodeData, out errMsg);

            if (!string.IsNullOrEmpty(errMsg))
            {
                return image;
            }

            string strExt = filePath.Substring(filePath.LastIndexOf(".")+1, filePath.Length - filePath.LastIndexOf(".") - 1);
            System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite);
            if (strExt.ToLower() == "jpg")
            {
                image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
            }
            else if (strExt.ToLower() == "bmp")
            {
                image.Save(fs, System.Drawing.Imaging.ImageFormat.Bmp);
            }
            else if (strExt.ToLower() == "gif")
            {
                image.Save(fs, System.Drawing.Imaging.ImageFormat.Gif);
            }
            else if (strExt.ToLower() == "png")
            {
                image.Save(fs, System.Drawing.Imaging.ImageFormat.Png);
            }
            fs.Close();
            return image;
        }

        public static Bitmap GetCodeImage(string filePathName, out string codeData)
        {
            Bitmap img = null;
            codeData = string.Empty;

            if (filePathName.Length < 5)
            {
                return img;
            }

            QRCodeDecoder decoder = new QRCodeDecoder();
            System.IO.FileStream fs = new System.IO.FileStream(filePathName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
            img = new Bitmap(fs);
            codeData = decoder.decode(new QRCodeBitmapImage(img), Encoding.GetEncoding("gb2312"));
            fs.Close();

            return img;
        }

        public enum EnCode
        {
            Byte = 0,
            AlphaNumeric = 1,
            Numeric = 2
        };

        public enum ErrorCorrect
        {
            L = 0,
            M = 1,
            Q = 2,
            H = 3
        };
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值