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

 

posted @ 2019-11-20 16:23  几清  阅读(872)  评论(0编辑  收藏  举报