C# 生成二维码

 1、添加 ThoughtWorks.QRCode.dll 引用

 2、代码

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Threading.Tasks; 5using Microsoft.AspNetCore.Authorization; 6using Microsoft.AspNetCore.Cors; 7using Microsoft.AspNetCore.Mvc; 8using System.Drawing; 9using System.Text; 10using ThoughtWorks.QRCode.Codec; 11using System.IO; 12 13namespace App.Web.APIControllers 14{ 15 /// <summary> 16 /// 生成二维码 17 /// </summary> public class QRCodeController : Controller 18 { 19 /// <summary> 20 /// 生成二维码 21 /// </summary> 22 /// <param name="enCodeString">要生成二维码的文字</param> 23 /// <returns></returns> 24 [HttpGet] 25 [AllowAnonymous] 26 public string QRCode(string enCodeString) 27 { 28 System.Drawing.Bitmap bt; 29 QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); 30 qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//编码方式(注意:BYTE能支持中文,ALPHA_NUMERIC扫描出来的都是数字) 31 qrCodeEncoder.QRCodeScale = 10;//大小(值越大生成的二维码图片像素越高) 32 qrCodeEncoder.QRCodeVersion = 0;//版本(注意:设置为0主要是防止编码的字符串太长时发生错误) 33 qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;//错误效验、错误更正(有4个等级) 34 qrCodeEncoder.QRCodeBackgroundColor = Color.White;//背景色 35 qrCodeEncoder.QRCodeForegroundColor = Color.Black;//前景色 36 bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8); 37 string filename = enCodeString;// "code"; 38 string file_path = AppDomain.CurrentDomain.BaseDirectory + "QRCode\\"; 39 string codeUrl = file_path + filename + ".jpg"; 40 41 //根据文件名称,自动建立对应目录 42 if (!System.IO.Directory.Exists(file_path)) 43 { 44 System.IO.Directory.CreateDirectory(file_path); 45 } 46 ////防止内容重复,导致名称重复问题, 47 ////若要每次更新,可去掉本段代码 ↓↓↓↓↓ 48 //int i = 1; 49 //while (System.IO.File.Exists(codeUrl)) 50 //{ 51 // string _filename = filename + "("+i+")"; 52 // codeUrl = file_path + _filename + ".jpg"; 53 // i++; 54 //} 55 //// ↑↑↑↑↑↑↑ 56 57 bt.Save(codeUrl);//保存图片 58 return codeUrl; 59 } 60 61 62 /// <summary> 63 /// 生成二维码【方法二】 64 /// </summary> 65 /// <param name="qrCodeScale">尺寸4-15</param> 66 /// <param name="qrCodeVersion">复杂级别3-12</param> 67 /// <param name="qrCodeErrorCorrect">容错量"H","L","M","Q"</param> 68 /// <param name="enCodeString">二维码信息</param> 69 /// <returns></returns> 70 [HttpGet] 71 [AllowAnonymous] 72 public string CreateEQcoder(int qrCodeScale, int qrCodeVersion, string qrCodeErrorCorrect, string enCodeString) 73 { 74 QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); 75 qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; 76 qrCodeEncoder.QRCodeScale = qrCodeScale; 77 qrCodeEncoder.QRCodeVersion = qrCodeVersion; 78 switch (qrCodeErrorCorrect) 79 { 80 case "H": 81 qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.H; 82 break; 83 case "L": 84 qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L; 85 break; 86 case "M": 87 qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M; 88 break; 89 case "Q": 90 qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.Q; 91 break; 92 } 93 qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L; 94 Bitmap bmPhoto = qrCodeEncoder.Encode(enCodeString, System.Text.Encoding.GetEncoding("UTF-8")); 95 string fileName = enCodeString+"_"+ qrCodeScale+"_"+qrCodeVersion+"_"+ qrCodeErrorCorrect; 96 string file_path = AppDomain.CurrentDomain.BaseDirectory + "QRCode\\"; 97 string savePath = file_path + fileName + ".jpg"; 98 try 99 { 100 if (!Directory.Exists(file_path)) 101 { 102 Directory.CreateDirectory(file_path); 103 } 104 105 //防止内容重复,导致名称重复问题,若要每次更新,可去掉本段代码 ↓↓↓↓↓ 106 int i = 1; 107 while (System.IO.File.Exists(savePath)) 108 { 109 string _filename = fileName + "(" + i + ")"; 110 savePath = file_path + _filename + ".jpg"; 111 i++; 112 } 113 //↑↑↑↑↑↑↑ 114 bmPhoto.Save(savePath); 115 bmPhoto.Dispose(); 116 return savePath ; 117 } 118 catch (Exception) 119 { 120 return ""; 121 } 122 finally 123 { 124 bmPhoto.Dispose(); 125 } 126 } 127 } 128}

 两种方法实际是一种方法。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

swap空间的增减方法

(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )