收藏文章 楼主

大神分享,用C#快速生成二维码

版块:IT/互联网   类型:普通   作者:小羊羔links   查看:198   回复:0   获赞:0   时间:2022-08-18 21:47:59

现在日常生活中,二维码随处可见,比如支付宝可以生成领赏金的二维码,图书中有直接可以扫描看视频的二维码,那么这些二维码是如何生成的呢?本实例将讲解如何使用C#生成二维码,运行本实例,在生成二维码时,用户可以选择是否需要生成带Logo的二维码。实例运行结果如图37所示。        

图37  C#生成二维码

 技术要点

本实例实现时,主要用到ZXing.Net组件,该组件是一个第三方组件,它是基于Java的条形码阅读器和生成器库ZXing的一个端口,支持在图像中解码和生成码(如二维码、条形码、PDF 417EANData MatrixCodabar等等 ,该组件的开源下载地址为 https://github.com/micjahn/ZXing.Net 下载完成后解压即可使用,使用ZXing.Net组件的步骤如下

在项目的“解决方案资源管理器”窗口中选中当前项目下的“引用”文件夹,单击右键,在弹出的快捷菜单中选择“添加引用”,然后在弹出的对话框中找到下载路径下的zxing.dll文件,添加到项目中,如图38所示。

图38  添加引用

添加完zxing.dll引用后,切换到代码页面,在命名空间区域添加命名空间后,即可使用该组件中的相应类及方法来生成 者识别码(包括二维码 ,例如,要操作二维码,需要添加如下命名空间

using ZXing;

using ZXing.Common;

using ZXing.QrCode;

using ZXing.QrCode.Internal;

代码实现

1 新建一个Windows应用程序,默认主窗体为Form1

2Form1窗体中添加3TextBox控件、一个RadioButton控件、两个Button控件和两个PictureBox控件,其中,TextBox控件用来设置二维码地址、宽度和高度,RadioButton控件用来设置是否在生成的二维码中包括LogoButton控件用来选择要包含的Logo图片和生成二维码,PictureBox控件用来显示选择的Logo图片和生成的二维码。

3 主要程序代码。

/// <summary>

/// 生成二维码图片

/// </summary>

/// <param name="strMessage">要生成二维码的字符串</param>

/// <param name="width">二维码图片宽度(单位 像素 </param>

/// <param name="height">二维码图片高度(单位 像素 </param>

/// <returns></returns>

private Bitmap GetQRCodeByZXingNet(String strMessage, Int32 width, Int32 height)

{

    Bitmap result = null;

    try

    {

        BarcodeWriter barCodeWriter = new BarcodeWriter();

        barCodeWriter.Format = BarcodeFormat.QR_CODE;

        barCodeWriter.Options.Hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8");

        barCodeWriter.Options.Hints.Add(EncodeHintType.ERROR_CORRECTION, ZXing.QrCode.Internal.ErrorCorrectionLevel.H);

        barCodeWriter.Options.Height = height;

        barCodeWriter.Options.Width = width;

        barCodeWriter.Options.Margin = 0;

        ZXing.Common.BitMatrix bm = barCodeWriter.Encode(strMessage);

        result = barCodeWriter.Write(bm);

    }

    catch { }

    return result;

}

/// <summary>

/// 生成中间带有图片的二维码图片

/// </summary>

/// <param name="contents">要生成二维码包含的信息</param>

/// <param name="middleImg">要生成到二维码中间的图片</param>

/// <param name="width">生成的二维码宽度(单位 像素 </param>

/// <param name="height">生成的二维码高度(单位 像素 </param>

/// <returns>中间带有图片的二维码</returns>

public Bitmap GetQRCodeByZXingNet(string contents, Image middleImg, int width, int height)

{

    if (string.IsNullOrEmpty(contents))

    {

        return null;

    }

    if (middleImg == null)

    {

        return GetQRCodeByZXingNet(contents,width,height);

    }

//构造二维码写码器

    MultiFormatWriter mutiWriter = 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 = mutiWriter.encode(contents, BarcodeFormat.QR_CODE, width, height, hint);

    BarcodeWriter barcodeWriter = new BarcodeWriter();

    Bitmap bitmap = barcodeWriter.Write(bm);

//获取二维码实际尺寸(去掉二维码两边空白后的实际尺寸

    int[] rectangle = bm.getEnclosingRectangle();

//计算插入图片的大小和位置

    int middleImgW = Math.Min((int)(rectangle[2] 3.5), middleImg.Width);

    int middleImgH = Math.Min((int)(rectangle[3] 3.5), middleImg.Height);

    int middleImgL = (bitmap.Width middleImgW) 2;

    int middleImgT = (bitmap.Height middleImgH) 2;

//img转换成bmp格式,否则后面无法创建 Graphics对象

    Bitmap bmpimg = new Bitmap(bitmap.Width, bitmap.Height, System.Drawing.Imaging.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(bitmap, 0, 0);

    }

//在二维码中插入图片

    Graphics myGraphic = Graphics.FromImage(bmpimg);

//白底

    myGraphic.FillRectangle(Brushes.White, middleImgL, middleImgT, middleImgW, middleImgH);

    myGraphic.DrawImage(middleImg, middleImgL, middleImgT, middleImgW, middleImgH);

    return bmpimg;

}

更多有价值资源尽在程序开发资源库。

点击“ ”,前往程序开发资源库




小羊羔锚文本外链网站长https://seo-links.cn 
回复列表
默认   热门   正序   倒序

回复:大神分享,用C#快速生成二维码

Powered by 小羊羔外链网 8.3.7

©2015 - 2024 小羊羔外链网

免费发软文外链 鄂ICP备16014738号-6

您的IP:3.234.246.109,2024-03-29 23:04:11,Processed in 0.04753 second(s).

支持原创软件,抵制盗版,共创美好明天!
头像

用户名:

粉丝数:

签名:

资料 关注 好友 消息