Net Core 生成二维码 一维码
二维码包QRCoder
生成二维码帮助类
public interface IQRCodeMoons: ISingletonDependency { Bitmap GetQRCode(string data, int pixel); byte[] GetQrCodeByteArray(string data, int pixel = 4); }
/// <summary> /// 二维码 /// </summary> public class QRCodeMoons: IQRCodeMoons { /// <summary> /// 生成二维码 /// </summary> /// <param name="url">存储内容</param> /// <param name="pixel">像素大小</param> /// <returns></returns> public Bitmap GetQRCode(string data, int pixel) { QRCodeGenerator generator = new QRCodeGenerator(); QRCodeData codeData = generator.CreateQrCode(data, QRCodeGenerator.ECCLevel.M, true); QRCoder.QRCode qrcode = new QRCoder.QRCode(codeData); Bitmap qrImage = qrcode.GetGraphic(pixel, Color.Black, Color.White, true); return qrImage; } /// <summary> /// 生成二维码并转成字节 /// </summary> /// <param name="data"></param> /// <param name="pixel"></param> /// <returns></returns> public byte[] GetQrCodeByteArray(string data, int pixel = 4) { var bitmap = GetQRCode(data, pixel); using (MemoryStream ms = new MemoryStream()) { bitmap.Save(ms, ImageFormat.Jpeg); return ms.GetBuffer(); } } }
直接把byte[] 字节返回给前端 前端通过img标签加载二维码<img "data:;base64,"+二维码字节数组 />
前端通过img标签加载字节中的图片
1.在angular中 直接这样通过img加载会报错 提示不安全的url 需要对这个url进行消毒 进行安全监测
注入消毒对象
private sanitizer: DomSanitizer
对当前地址进行消毒 通过[src] 属性绑定的方式 不能通过src='{{}}'这种方式绑定值 如果对html本文进行绑定也需要通过bypassSecurityTrustHtml进行消毒
this.imageByte= this.sanitizer.bypassSecurityTrustResourceUrl("data:;base64,"+result.qrCode)
<img *ngIf="data" [src]="imageByte" />
2.可以通过div 设置背景图片的方式避开这个问题 但是调用js打印的时候无法加载背景图片
<div [ngStyle]="{'background-image':'url(data:;base64,'+data.qrCode+')'}"></div> <img width="75px" src="data:;base64,{{data.qrCode}}" />
一维码包BarcodeLib
生成一维码帮助类
public interface IBarCodeMoons : ISingletonDependency { Image GetBarCode(string data); byte[] GetBarCodeByteArray(string data); }
/// <summary> /// 一维码 /// </summary> public class BarCodeMoons: IBarCodeMoons { /// <summary> /// 生成一维码 /// </summary> /// <param name="data">存储内容</param> /// <returns></returns> public Image GetBarCode(string data) { BarcodeLib.Barcode b = new BarcodeLib.Barcode(); Image img = b.Encode(BarcodeLib.TYPE.CODE128, data, Color.Black, Color.White, 290, 120); return img; } /// <summary> /// 生成一维码并转成字节 /// </summary> /// <param name="data"></param> /// <returns></returns> public byte[] GetBarCodeByteArray(string data) { var img = GetBarCode(data); using (MemoryStream ms = new MemoryStream()) { img.Save(ms, ImageFormat.Jpeg); return ms.GetBuffer(); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构