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(); } } }