C# ZXing.Net生成二维码、识别二维码、生成带Logo的二维码

一.ZXing.Net 源代码地址http://zxingnet.codeplex.com/

也可以使用Nuget包管理,添加如图:

说明:ZXing是一个开源Java类库用于解析多种格式的1D/2D条形码。目标是能够对QR编码、Data Matrix、UPC的1D条形码进行解码。 其提供了多种平台下的客户端包括:J2ME、J2SE和Android。现在也有了对应的.Net版本

二、生成二维码

将字符编码时可以指定字符格式;默认为ISO-8859-1英文字符集,但一般移动设备常用UTF-8字符集编码,

可以通过QrCodeEncodingOptions设置编码方式。

如果要生成其他zxing支持的条形码,只要修改BarcodeWriter.Format就可以了。

复制代码
/// <summary>
/// 生成二维码,保存成图片
/// </summary>
static void Generate1(string text)
{
    BarcodeWriter writer = new BarcodeWriter();
    writer.Format = BarcodeFormat.QR_CODE;
    QrCodeEncodingOptions options = new QrCodeEncodingOptions();
    options.DisableECI = true;
    //设置内容编码
    options.CharacterSet = "UTF-8";
    //设置二维码的宽度和高度
    options.Width = 500;
    options.Height = 500;
    //设置二维码的边距,单位不是固定像素
    options.Margin = 1;
    writer.Options = options;

    Bitmap map = writer.Write(text);
    string filename = @"H:\桌面\截图\generate1.png";
    map.Save(filename, ImageFormat.Png);
    map.Dispose();
}
复制代码
//生成二维码 
Generate1("https://www.baidu.com/");
Generate1("ionic是一个强大的混合式/hybrid HTML5移动开发框架,特点是使用标准的HTML、CSS和JavaScript,开发跨平台的应用 ,只需要几步就可以快速创建您的Ionic应用,创建应用从这里开始");

三、生成条形码

复制代码
static void Generate2(string text)
{
    BarcodeWriter writer = new BarcodeWriter();
    //使用ITF 格式,不能被现在常用的支付宝、微信扫出来
    //如果想生成可识别的可以使用 CODE_128 格式
    //writer.Format = BarcodeFormat.ITF;
    writer.Format = BarcodeFormat.CODE_128;
    EncodingOptions options = new EncodingOptions()
    {
        Width = 150,
        Height =50,
        Margin=2
    };
    writer.Options = options;
    Bitmap map = writer.Write(text);
    string filename = @"H:\桌面\截图\generate2.png";
    map.Save(filename, ImageFormat.Png);
}
复制代码
复制代码
//生成条形码
Generate2("1234567890");
//错误说明
//只支持数字
Requested contents should only contain digits, but got 'i'
//只支持偶数个
The lenght of the input should be even
//最大长度80
Requested contents should be less than 80 digits long, but got 102
复制代码

三、识别二维码/条形码

复制代码
/// <summary>
/// 读取二维码
/// 读取失败,返回空字符串
/// </summary>
/// <param name="filename">指定二维码图片位置</param>
static string Read1(string filename)
{
    BarcodeReader reader = new BarcodeReader();
    reader.Options.CharacterSet = "UTF-8";
    Bitmap map = new Bitmap(filename);
    Result result = reader.Decode(map);
    return result == null ? "" : result.Text;
}
复制代码
复制代码
//1.读取二维码内容
//读取字母成功
//string filename = @"H:\桌面\截图\url.png";
//string filename = @"H:\桌面\截图\weibo.png";
//string filename = @"H:\桌面\截图\qrcode1.png";
//string filename = @"H:\桌面\截图\qrcode2.png";
//string filename = @"H:\桌面\截图\qrcode3.png";
//对于有logo的二维码只返回字符串内容
//string filename = @"H:\桌面\截图\qrcode4.png";
//string filename = @"H:\桌面\截图\qrcode5.png";
//string filename = @"H:\桌面\截图\qrcode6.png";
//识别条形码
string filename = @"H:\桌面\截图\generate2.png";
string result = Read1(filename);
Console.WriteLine(result);
复制代码

 

Demo源代码:http://git.oschina.net/tiama3798/QrCodeTool/tree/StudyDemo1/

 

1.使用ZXint.Net生成带logo的二维码

复制代码
/// <summary>
/// 生成带Logo的二维码
/// </summary>
/// <param name="text"></param>
static void Generate3(string text)
{
    //Logo 图片
    Bitmap logo = new Bitmap(@"H:\桌面\截图\102.jpg");
    //构造二维码写码器
    MultiFormatWriter writer = new MultiFormatWriter();
    Dictionary<EncodeHintType, object> hint = new Dictionary<EncodeHintType, object>();
    hint.Add(EncodeHintType.CHARACTER_SET,"UTF-8");
    hint.Add(EncodeHintType.ERROR_CORRECTION,ErrorCorrectionLevel.H);

    //生成二维码 
    BitMatrix bm = writer.encode(text,BarcodeFormat.QR_CODE,300,300,hint);
    BarcodeWriter barcodeWriter = new BarcodeWriter();
    Bitmap map = barcodeWriter.Write(bm);


    //获取二维码实际尺寸(去掉二维码两边空白后的实际尺寸)
    int[] rectangle = bm.getEnclosingRectangle();

    //计算插入图片的大小和位置
    int middleW = Math.Min((int)(rectangle[2] / 3.5), logo.Width);
    int middleH = Math.Min((int)(rectangle[3]/3.5),logo.Height);
    int middleL = (map.Width - middleW) / 2;
    int middleT = (map.Height - middleH) / 2;

    //将img转换成bmp格式,否则后面无法创建Graphics对象
    Bitmap bmpimg = new Bitmap(map.Width,map.Height,PixelFormat.Format32bppArgb);
    using (Graphics g=Graphics.FromImage(bmpimg))
    {
        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
        g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
        g.DrawImage(map,0,0);
    }
    //将二维码插入图片
    Graphics myGraphic = Graphics.FromImage(bmpimg);
    //白底
    myGraphic.FillRectangle(Brushes.White,middleL,middleT,middleW,middleH);
    myGraphic.DrawImage(logo,middleL,middleT,middleW,middleH);

    //保存成图片
    bmpimg.Save(@"H:\桌面\截图\generate3.png",ImageFormat.Png);
}
复制代码

调用:

//生成带图片的二维码
Generate3("https://www.baidu.com/");
Generate3("ionic是一个强大的混合式/hybrid HTML5移动开发框架,特点是使用标准的HTML、CSS和JavaScript,开发跨平台的应用 ,只需要几步就可以快速创建您的Ionic应用,创建应用从这里开始");

猜你喜欢

转载自blog.csdn.net/qmdweb/article/details/80774654