首页 > 其他分享 >二维码生成器 ZXing.Net 组件应用

二维码生成器 ZXing.Net 组件应用

时间:2024-06-01 18:11:14浏览次数:11  
标签:int 生成器 System ZXing 二维码 using Net barcodeWriter

c# 二维码生成器(ZXing.Net)实现

安装组件

image

Code

using Sunny.UI;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
using ZXing;
using ZXing.Common;
using ZXing.QrCode.Internal;
namespace WindowsFormsApp1
{
    public partial class Form1 : UIForm
    {
        public Form1()
        {
            InitializeComponent();
        }
        #region 生成二维码方法
        /// <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 bitmap = 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);
                bitmap = barcodeWriter.Write(bm);
                
            }
            catch(Exception ex) {
                MessageBox.Show("生成二维码错误!"+ex.Message);
            }
            return bitmap;
        
        }

        public Bitmap GetQRCodeByZXingNet(string strMessage, Image middleImg, int width, int height) {
            if (string.IsNullOrEmpty(strMessage)){
                return null;
            }
            if(middleImg == null) {
               return GetQRCodeByZXingNet(strMessage, width, height);   

            }
            //实例化二维码写对象
            MultiFormatWriter multiFormatWriter = 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 = multiFormatWriter.encode(strMessage, 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(width, 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;
        }
        #endregion
        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void chkPicture_CheckedChanged(object sender, EventArgs e)
        {
            if (chkPicture.Checked)
            {
                uiGroupBox2.Visible = true;
            }
            else
            {
                uiGroupBox2.Visible = false;
            }
        }

        private void btnGeneralBarCode_Click(object sender, EventArgs e)
        {
            Bitmap qrCode;
            if (chkPicture.Checked)
            {
                qrCode = GetQRCodeByZXingNet(txtContents.Text, pictureBox2.Image, Convert.ToInt32(txtWidth.Text), Convert.ToInt32(txtHeight.Text));

            }
            else
            {
                qrCode = GetQRCodeByZXingNet(txtContents.Text, Convert.ToInt32(txtWidth.Text), Convert.ToInt32(txtHeight.Text));

            }
            qrCode.Save("qr.png",ImageFormat.Png);
            pictureBox1.Image = qrCode;
        }

        private void btnSelectLogo_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFile = new OpenFileDialog();
            openFile.Filter = "图片文件|*.jpg;*.jpeg;*.png;*.bmp";
            if (openFile.ShowDialog() == DialogResult.OK)
            {
                pictureBox2.Image = Image.FromFile(openFile.FileName);
            }
        }
    }
}

运行效果

image

标签:int,生成器,System,ZXing,二维码,using,Net,barcodeWriter
From: https://www.cnblogs.com/sundh1981/p/18226234

相关文章

  • Kubernetes 集群的节点安装 kubectl
    如果您在机器上没有kubectl,但您有权限访问Kubernetes集群的节点,并且您有集群的kubeconfig文件,您可以手动创建或者传输kubeconfig文件到您的机器上。kubeconfig文件包含了访问Kubernetes集群所需的配置信息,包括集群地址、认证信息、默认命名空间等。通常情况下,kubeconf......
  • Zero Trust Networks【3】
    一、WhatIsanAgent?二、HowtoExposeanAgent?Chapter3.Context-AwareAgents想象一下,你正处在一个有安全意识的组织中。每个员工都有一台经过高度认证的笔记本电脑来完成他们的工作。随着今天的工作和个人生活的融合,一些人还想在手机上查看他们的电子邮件和日历。在......
  • 使用 .NET Core 实现微服务(带例子)
    使用.NETCore实现微服务使用.NETCore实现微服务架构涉及几个关键步骤,包括服务划分、API网关、服务通信和容器化部署。下面是一个简化的示例,展示如何使用.NETCore实现一个基本的微服务架构。步骤1:创建独立的微服务定义微服务每个微服务都是一个独立的ASP.NE......
  • .NET开源、跨平台、使用简单的面部识别库
    前言今天给大家分享一个.NET开源(MITLicense)、免费、跨平台(适用于Windows、MacOS和Linux)、使用简单的面部识别库:FaceRecognitionDotNet。项目介绍FaceRecognitionDotNet这个项目是 face_recognition 的C#移植版本。face_recognition是一个基于Python的人脸识别库,......
  • 【MISC】一道假的二维码题目学习zxing库[python解读二维码]
    引言这道题目的考点是文件格式、双图差值、Ook!编码、PRC等,我做这题的重点是复习巩固python读取二维码zxing库的使用。例题┌───────────────────────────────────────────────────┐│马老师的秘籍......
  • error: no configuration has been provided, try setting KUBERNETES_MASTER environ
    1:问题kubernetes集群,一台master,一台node1,一台node2,重启电脑后,node1节点和node2节点报错如下error:noconfigurationhasbeenprovided,trysettingKUBERNETES_MASTERenvironmentvariable2:解决方法2.1:查看master节点进入到该目录下cd/etc/kubernetes把admi......
  • 微软官方出品微服务架构:10个.Net开源项目
    今天一起盘点下,11月份推荐的10个.Net开源项目(点击标题查看详情)。1、一个高性能类型安全的.NET枚举实用开源库Enums.NET是一个.NET枚举实用程序库,专注于为枚举提供丰富的操作方法。它支持.NETFramework和.NetCore。它主要优点表现在类型安全、高性能、丰富的操作方法和易于使......
  • Kubernetes脑图
          对于非技术人员来说,Kubernetes(常简称为K8s或Kube)是一个开源平台,它能让Linux容器的操作变得更加自动化和高效。以下是针对非技术人员的Kubernetes介绍,用简洁明了的方式解释了其主要特点和功能:定义和起源:Kubernetes(发音类似于“koo-ber-nay-tees”)源自希腊语,意为“舵......
  • 【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service
    在前一篇文章中,我们是把.NET8应用读取SSL证书(X509)示例部署在AppServiceWindows环境中,那么如果部署在Linux环境,以及LinuxContainer中呢?根据前文中的第一种方法,直接在把证书文件包含在源文件中,通过相对路径读取证书文件的方式,经测试,可以正常工作。但是,对于第二种“通过指......
  • dotnet C# 创建 X11 应用时设置窗口背景颜色
    本文将告诉大家如何在X11里面创建一个窗口时,设置窗口的背景颜色在dotnetC#设置X11应用窗口背景透明的基础上,可以通过创建XColor结构体,将XColor赋值给到XSetWindowAttributes的background_pixel进行设置窗口的初始化背景颜色核心实现如下先创建XColor结构体,代......