首页 > 编程语言 >C#生成二维码(【ThoughtWorks.QRCode】【QRCoder】【ZXing.Net】)

C#生成二维码(【ThoughtWorks.QRCode】【QRCoder】【ZXing.Net】)

时间:2023-05-05 15:12:50浏览次数:34  
标签:string C# System ZXing 二维码 new QRCoder Drawing

1、通过ThoughtWorks.QRCode实现生成二维码,可直接通过添加Nuget包引用

        /// <summary>
        /// ThoughtWorks.QRCode生成二维码
        /// </summary>
        /// <param name="filePath">二维码生成后保存地址</param>
        /// <param name="qrCodeContent">二维码内容</param>
        public static void CreateQRCode(string filePath, string qrCodeContent)
        {
            ThoughtWorks.QRCode.Codec.QRCodeEncoder qrCodeEncoder = new ThoughtWorks.QRCode.Codec.QRCodeEncoder();
            qrCodeEncoder.QRCodeEncodeMode = ThoughtWorks.QRCode.Codec.QRCodeEncoder.ENCODE_MODE.BYTE;
            qrCodeEncoder.QRCodeScale = 4;//二维码大小比例
            qrCodeEncoder.QRCodeVersion = 8;
            qrCodeEncoder.QRCodeErrorCorrect = ThoughtWorks.QRCode.Codec.QRCodeEncoder.ERROR_CORRECTION.M;
            System.Drawing.Image image = qrCodeEncoder.Encode(qrCodeContent, Encoding.UTF8);//生成二维码图片
            System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.Create, System.IO.FileAccess.Write, System.IO.FileShare.None);
            image.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
            fs.Close();
            image.Dispose();
        }
        /// <summary>
        /// 二维码解码
        /// </summary>
        /// <param name="filePath">二维码图片路径</param>
        /// <returns></returns>
        public static string QRCodeDecoder(string filePath)
        {
            if (!System.IO.File.Exists(filePath))
            { return null; }
            System.Drawing.Bitmap myBitmap = new System.Drawing.Bitmap(System.Drawing.Image.FromFile(filePath));
            ThoughtWorks.QRCode.Codec.QRCodeDecoder decoder = new ThoughtWorks.QRCode.Codec.QRCodeDecoder();
            string decodedString = decoder.decode(new ThoughtWorks.QRCode.Codec.Data.QRCodeBitmapImage(myBitmap), Encoding.UTF8);
            return decodedString;
        }

2、通过QRCoder实现生成二维码,可直接通过添加Nuget包引用

        /// <summary>
        /// 生成二维码可附带中央水印
        /// </summary>
        /// <param name="filePath">二维码生成后保存地址</param>
        /// <param name="qrCodeContent">二维码内容</param>
        /// <param name="iconPath">二维码中央水印保存地址</param>
        public static void CreateQRCode(string filePath, string qrCodeContent, string iconPath = "")
        {
            // 生成二维码的内容
            QRCoder.QRCodeGenerator qrGenerator = new QRCoder.QRCodeGenerator();
            QRCoder.QRCodeData qrCodeData = qrGenerator.CreateQrCode(qrCodeContent, QRCoder.QRCodeGenerator.ECCLevel.Q);
            QRCoder.QRCode qrcode = new QRCoder.QRCode(qrCodeData);
            System.Drawing.Bitmap icon = null;//中央水印图标
            int iconSizePercent = 0;//水印图标大小
            int iconBorderWidth = 0;//水印图标边框
            int pixelsPerModule = 55;//像素大小
            bool drawQuietZones = false;//是否需要二维码外围空白区域(白边)
            System.Drawing.Color darkColor = System.Drawing.Color.Black;//二维码暗色部分,Color.颜色
            System.Drawing.Color lightColor = System.Drawing.Color.White;//亮色部分,Color.颜色
            //判断有无中心水印图标
            if (!string.IsNullOrWhiteSpace(iconPath))
            {
                icon = new System.Drawing.Bitmap(iconPath);
                iconSizePercent = 10;
                iconBorderWidth = 10;
            }
            //设置生成二维码
            System.Drawing.Bitmap qrCodeImage = qrcode.GetGraphic(pixelsPerModule, darkColor, lightColor, icon, iconSizePercent, iconBorderWidth, drawQuietZones);
            //保存二维码图片
            System.IO.Stream outputStream = new System.IO.FileStream(filePath, System.IO.FileMode.Create, System.IO.FileAccess.Write, System.IO.FileShare.None);
            qrCodeImage.Save(outputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
            outputStream.Close();
            outputStream.Dispose();
        }

 3、通过ZXing.Net实现生成二维码,可直接通过添加Nuget包引用

    /// <summary>
        /// 生成二维码
        /// </summary>
        /// <param name="filePath">地址</param>
        /// <param name="qrCodeContent">内容</param>
        public static void CreateZXingQrCode(string filePath, string qrCodeContent)
        {
            //设置规格
            ZXing.QrCode.QrCodeEncodingOptions options = new ZXing.QrCode.QrCodeEncodingOptions()
            {
                Width = 500,//设置二维码的宽度
                Height = 500,//设置二维码的高度
                Margin = 1,//设置二维码的边距
                CharacterSet = "UTF-8",//设置内容编码
                DisableECI = true,
            };
            //生成二维码
            ZXing.BarcodeWriter writer = new ZXing.BarcodeWriter()
            {
                Format = ZXing.BarcodeFormat.QR_CODE,//生成类型
                Options = options,//设置格式
            };
            //
            System.Drawing.Bitmap bitmap = writer.Write(qrCodeContent);//存放二维码;
            //进行保存
            bitmap.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg);
            bitmap.Dispose();
        }
        /// <summary>
        /// 生成带logo的二维码
        /// </summary>
        /// <param name="filePath"></param>
        /// <param name="qrCodeContent"></param>
        /// <param name="imagePath"></param>
        public static void CreateZXingQrCode(string filePath, string qrCodeContent, string imagePath)
        {
            //设置规格
            ZXing.QrCode.QrCodeEncodingOptions option = new ZXing.QrCode.QrCodeEncodingOptions()
            {
                CharacterSet = "UTF-8",// 设置编码格式,否则读中文会乱码
                Height = 200,
                Width = 200,
                Margin = 1,// 设置二维码周围空白边距(可选)
            };
            //生成图片
            ZXing.BarcodeWriter writer = new ZXing.BarcodeWriter()
            {
                Options = option,
                Format = ZXing.BarcodeFormat.QR_CODE,//生成类型
            };
            System.Drawing.Bitmap img = writer.Write(qrCodeContent);
            // 添加logo图片
            System.Drawing.Bitmap logoImg = System.Drawing.Bitmap.FromFile(imagePath) as System.Drawing.Bitmap;
            System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(img);
            System.Drawing.Rectangle logoRec = new System.Drawing.Rectangle() ;
            //设置logo图片的大小和绘制位置
            logoRec.Width = img.Width / 6;
            logoRec.Height = img.Height / 6;
            logoRec.X = img.Width / 2 - logoRec.Width / 2; // 中心点
            logoRec.Y = img.Height / 2 - logoRec.Height / 2;
            graphics.DrawImage(logoImg, logoRec);
            //保存绘制后的图片
            img.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg);
            img.Dispose();
        }

        /// <summary>
        /// 读取二维码
        /// </summary>
        /// <param name="filePath">地址</param>
        /// <returns></returns>
        public static string ReadZXingQrCode(string filePath)
        {
            //读取规格
            ZXing.Common.DecodingOptions options = new ZXing.Common.DecodingOptions();
            options.PossibleFormats = new List<ZXing.BarcodeFormat>()
            {
                ZXing.BarcodeFormat.QR_CODE
            };
            ZXing.BarcodeReader br = new ZXing.BarcodeReader()
            {
                Options = options
            };
            //指定规格
            //读取图片
            System.Drawing.Image image = System.Drawing.Image.FromFile(filePath);
            //读取图片内容
            ZXing.Result rs = br.Decode(image as System.Drawing.Bitmap);
            return rs.Text;
        }

 

标签:string,C#,System,ZXing,二维码,new,QRCoder,Drawing
From: https://www.cnblogs.com/lwk9527/p/17374173.html

相关文章

  • Vue3 开发必备的 VSCode 插件
    分享6个Vue3开发必备的VSCode插件,可以直接用过VSCode的插件中心直接安装使用。1、Volar相信使用VSCode开发Vue2的同学一定对Vetur插件不会陌生,作为Vue2配套的VSCode插件,它的主要作用是对Vue单文件组件提供高亮、语法支持以及语法检测。而随着Vue3正式......
  • 《花雕学AI》31:ChatGPT--用关键词/咒语/提示词Prompt激发AI绘画的无限创意!
    你有没有想过用AI来画画?ChatGPT是一款基于GPT-3的聊天模式的AI绘画工具,它可以根据你输入的关键词/咒语/提示词Prompt来生成不同风格和主题的画作。Prompt是一些简短的文字,可以用来指导ChatGPT的创作过程。在这篇文章中,我将展示一些用ChatGPT和不同的Prompt创造出来的有趣和创意的A......
  • C# Spire.PDF 实现pdf文件盖章
    1、添加引用通过Spire.PDF实现合同盖章,社区版dll(免费,但是只支持10页以内的pdf文档),也可以直接通过VS管理NuGet包添加dll引用,收费版直接搜索Spire.PDF安装,免费社区版搜索FreeSpire.PDF安装2、参数定义与调用stringpdfPath="C:\\Users\\Administrator\\Desktop\\2月份工作......
  • 《CTFshow-Web入门》08. Web 71~80
    目录web71知识点题解web72知识点题解web73题解web74题解web75知识点题解web76题解web77知识点题解web78知识点题解web79题解web80知识点题解ctf-web入门web71知识点ob_get_contents():得到输出缓冲区的内容。ob_end_clean():清除缓冲区的内容,并将缓冲区关闭,但不会输出内......
  • C# 通过iTextSharp实现pdf文件盖章(通过在内容中插入盖章图片的形式)
    具体盖章方法实现///<summary>///第一页盖章///</summary>///<paramname="pdfPath">源pdf地址</param>///<paramname="outPdfPath">盖章后生成pdf地址</param>///<paramna......
  • C# 生成印章
    1、界面实现及按钮事件 ///点击按钮事件privatevoidbutton2_Click(objectsender,EventArgse){try{stringimageUrl="C:\\Users\\Administrator\\Desktop\\新建文件夹(2)";stringimageForm......
  • bootstrap-select组件
    bootstrap-select组件mmkkuoi于2021-10-1312:08:55发布10178收藏19分类专栏:js文章标签:bootstrapselect版权华为云开发者联盟该内容已被华为云开发者联盟社区收录加入社区js专栏收录该内容2篇文章0订阅订阅专栏阅读目录一、组件开源地址以及API说......
  • ArcGIS Pro创建、发布、调用GP服务全过程示例(等高线分析)
    在之前的文章介绍过使用ArcMap发布GP分析服务,由于ArcGIS后续不在更新ArcMap,改用ArcGISPro,本文对ArcGISPro发布GP分析服务进行说明。本文以等高线分析为例,使用ArcGISPro软件,从GP分析服务的创建、发布、调用全过程进行演示。使用ArcMap发布GP服务请跳转:本文示例使用(因为本人po......
  • CT感应取电无线测温解决高压柜内测温难题
    安科瑞虞佳豪随着社会经济的不断发展,电力系统向着高电压、高容量的方向前进着,电力系统全新的技术与设备层出不穷,电力的输送能力不断提升。然而,高压电气设备承载的高压电力负荷也让其自身的温升问题成为了威胁电网稳定的元凶,设备温度已经成为了当下电网输电设备稳定运行的重要参数......
  • STM32单片机引脚要职能配置为输入或者输出模式,并不能像51一样准双向,那么如何进行但总
    如题随便找个端口举例对应的程序为 难道需要写之后立即初始化为输入?然后赶紧读?然后再赶紧初始化为输出?再往外写?是的,还真他妈就是这么傻逼的操作 ......