WPF使用Zxing.net生成二维码

这篇具有很好参考价值的文章主要介绍了WPF使用Zxing.net生成二维码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Windows.Media.Imaging;
using ZXing;
using ZXing.Common;
using ZXing.QrCode;
using ZXing.QrCode.Internal;
using ZXing.Windows.Compatibility;


namespace Huanzhang.Common.Helpers
{
    public static class QRCodeHelper
    {
        /// <summary>
        /// 生成二维码
        /// </summary>
        /// <param name="sContent">二维码内容</param>
        /// <param name="width">二维码宽度,单位像素</param>
        /// <param name="height">二维码高度,单位像素</param>
        /// <returns></returns>
        public static BitmapSource? CreateQRCode(string sContent, int width = 300, int height = 300)
        {
            BarcodeWriter writer = new BarcodeWriter();
            writer.Format = BarcodeFormat.QR_CODE;
            writer.Options = new QrCodeEncodingOptions()
            {
                CharacterSet = "UTF-8",
                Margin = 1,
                DisableECI = true,
                Height = height,
                Width = width,
            };

            var bitmap = writer.Write(sContent);

            return BitmapToImageSource(bitmap);
        }

        /// <summary>
        /// 生成二维码
        /// </summary>
        /// <param name="sContent">二维码内容</param>
        /// <param name="width">二维码宽度,单位像素</param>
        /// <param name="height">二维码高度,单位像素</param>
        /// <param name="logoImagPath">二维码Logo图片路径</param>
        /// <returns></returns>
        public static BitmapSource? CreateQRCode(string sContent, int width, int height, string logoImagPath)
        {
            if (!File.Exists(logoImagPath))
            {
                throw new ArgumentException("二维码Logo图片路径不存在!");
            }
            var logo = System.Drawing.Image.FromFile(logoImagPath);
            //初始化
            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);
            hint.Add(EncodeHintType.MARGIN, 1);

            //生成二维码
            BitMatrix bm = writer.encode(sContent, BarcodeFormat.QR_CODE, width, height, hint);
            BarcodeWriter barcodeWriter = new BarcodeWriter();
            Bitmap map = barcodeWriter.Write(bm);
            //计算尺寸
            int[] rectangle = bm.getEnclosingRectangle();

            //计算插入Logo的大小位置
            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);

            return BitmapToImageSource(bmpimg);
        }

        private static BitmapImage? BitmapToImageSource(Bitmap bitmap)
        {
            if (bitmap == null) return null;
            using (MemoryStream memory = new MemoryStream())
            {
                bitmap.Save(memory, System.Drawing.Imaging.ImageFormat.Bmp);
                bitmap.Dispose();
                memory.Position = 0;
                BitmapImage bitmapimage = new BitmapImage();
                bitmapimage.BeginInit();
                bitmapimage.StreamSource = memory;
                bitmapimage.CacheOption = BitmapCacheOption.OnLoad;
                bitmapimage.EndInit();

                return bitmapimage;
            }
        }

        public static string LoadImage(string imagePath, ref string sFormat)
        {
            BarcodeReader reader = new BarcodeReader();
            //设置读取的格式(一般为UTF-8)
            reader.Options.CharacterSet = "UTF-8";
            Bitmap p = new Bitmap(imagePath);
            Result result = reader.Decode(p);
            if (result != null)
            {
                sFormat = result.BarcodeFormat.ToString();
                return result.ToString();
            }
            else
                return null;
        }
    }
}

在Nuget引用Zxing.net 包和ZXing.Net.Bindings.Windows.Compatibility包即可。文章来源地址https://www.toymoban.com/news/detail-531740.html

到了这里,关于WPF使用Zxing.net生成二维码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在Spring Boot中使用ZXing开源库生成带有Logo的二维码

    在上一篇文章的基础上,我们将进一步扩展功能,实现在生成的二维码中嵌入Logo图片。这样的二维码更具个性化和识别度。让我们逐步完成这个功能。 首先,准备一张用作Logo的图片,并确保它的大小适中。将Logo图片放置在项目的资源文件夹中,例如 src/main/resources 。 在 Q

    2024年01月24日
    浏览(52)
  • .NET/C# 生成二维码

    大家好,在本章是如何通过.net/C#来生成二维码 首先大家还是需要仔细阅读这篇文档有小细节就需要注意 大家需要生成一些类,把我的方法复制进去,如果不想添加类的话,大家需要再主代码上更改引用信息找到我们所添加的方法 不适用于零基础的朋友,适用于有点经验的懂

    2024年02月06日
    浏览(45)
  • spring boot 通过zxing生成二维码

    Spring Boot是一个基于Spring框架的快速开发、便捷部署的微服务框架。而ZXing是一个功能强大的开源库,用于生成和解析二维码。在Spring Boot应用中,您可以整合ZXing库来方便地生成二维码。 接下来,创建一个Spring Boot服务,并编写一个控制器类来生成二维码。以下是一个简单的

    2024年01月21日
    浏览(50)
  • .NET生成微信小程序推广二维码

    对于小程序大家可能都非常熟悉了,随着小程序的不断普及越来越多的公司都开始推广使用起来了。今天接到一个需求就是生成小程序码,并且与运营给的推广图片合并在一起做成一张漂亮美观的推广二维码,扫码这种二维码就可以进入小程序。为了节省服务器内存资源,我

    2024年04月23日
    浏览(53)
  • Android之 Zxing二维码详解

    一 简介 1.1 ZXing 目前Android扫描二维码,条形码主要用google官方的工具Zxing,支持扫码,相册解码,生成带logo的二维码等功能  Zxing github 示例地址:https://github.com/zxing/zxing 1.2 ZBar 由于zxing是基于java编写的,扫码速度和解析上可能没那么快,但大部分场合足够用。也有基于c/

    2024年02月08日
    浏览(40)
  • zxing二维码位矩阵转换成Bitmap位图

    ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码。 该项目可实现的条形码编码和解码。我们支持以下格式: UPC-A,UPC-E EAN-8,EAN-13 39码 93码 代码128 创新及科

    2023年04月11日
    浏览(49)
  • C#中轻松实现二维码和条形码识别:OpenCvSharp和ZXing详细教程

      概述: 本教程使用OpenCvSharp和ZXing库,详细介绍了在C#中识别二维码和条形码的步骤。通过导入必要的命名空间、加载图像,并使用ZXing库进行二维码和条形码的识别,提供了清晰的示例代码。这方便了开发人员在项目中集成二维码和条形码识别功能。 要使用OpenCvSharp来分别

    2024年03月09日
    浏览(75)
  • Vue中qrcode的使用方法(生成二维码插件) / 前端页面根据URL链接生成二维码

    1.下载 npm install qrcode --save-dev 2.引入(在所需要的页面中引入) import QRCode from “qrcode”; //引入生成二维码插件 3.生成二维码 作者:微微一笑绝绝子 出处:Vue中qrcode的使用方法(生成二维码插件) / 前端页面根据URL链接生成二维码 - 微微一笑绝绝子 - 博客园 本博客文章均为作者

    2024年02月15日
    浏览(58)
  • 二维码生成器简单使用

    以下是一个简单的 QRCodeUtil 示例,这个工具类使用了 zxing 库来生成二维码图片: 这个 QRCodeUtil 工具类包含了以下方法: createQRCode(String content) :生成默认宽度和高度的二维码图片,并返回 BufferedImage 对象。 createQRCode(String content, int width, int height) :根据指定的宽度和高度生成

    2024年02月15日
    浏览(48)
  • 使用jquery.qrcode生成二维码

    1、首先在页面中加入jquery库文件和qrcode插件。 2、在页面中需要显示二维码的地方加入以下代码: 3、生成二维码 qrcode支持canvas和table两种方式进行图片渲染,默认使用canvas方式,效率最高,当然要浏览器支持html5。直接调用如下 也可以通过以下方式调用: 这样就可以在页面

    2024年02月06日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包