.net core二维码生成

引用 ZXing

然后如下代码

    public static class BarcodeGenerator
    {
        public enum OutputFormat
        {
            PNG,
            SVG
        }
        public static String GeneratePng(string content, BarcodeFormat barcodeformat, int width, int height, int margin, string alt)
        {
            var qrWriter = new ZXing.BarcodeWriterPixelData
            {
                Format = barcodeformat,
                Options = new EncodingOptions { Height = height, Width = width, Margin = margin }
            };


            var pixelData = qrWriter.Write(content);

            // creating a bitmap from the raw pixel data; if only black and white colors are used it makes no difference
            // that the pixel data ist BGRA oriented and the bitmap is initialized with RGB
            // the System.Drawing.Bitmap class is provided by the CoreCompat.System.Drawing package
            using (var bitmap = new System.Drawing.Bitmap(pixelData.Width, pixelData.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb))
            using (var ms = new MemoryStream())
            {
                // lock the data area for fast access
                var bitmapData = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, pixelData.Width, pixelData.Height),
                   System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
                try
                {
                    // we assume that the row stride of the bitmap is aligned to 4 byte multiplied by the width of the image
                    System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan0,
                       pixelData.Pixels.Length);
                }
                finally
                {
                    bitmap.UnlockBits(bitmapData);
                }
                // save to stream as PNG
                bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);

                //output.TagName = "img";
                //output.Attributes.Clear();
                //output.Attributes.Add("width", pixelData.Width);
                //output.Attributes.Add("height", pixelData.Height);
                //output.Attributes.Add("alt", alt);
                //output.Attributes.Add("src",
                //   String.Format("data:image/png;base64,{0}", Convert.ToBase64String(ms.ToArray())));
                return String.Format("data:image/png;base64,{0}", Convert.ToBase64String(ms.ToArray()));
            }
        }

        public static String GenerateSvg(string content, BarcodeFormat barcodeformat, int width, int height, int margin, string alt)
        {
            var qrWriter = new ZXing.BarcodeWriterSvg
            {
                Format = barcodeformat,
                Options = new EncodingOptions { Height = height, Width = width, Margin = margin }
            };


            var svgImage = qrWriter.Write(content);
            return String.Format("data:image/svg+xml;{0}", svgImage.Content);
            //output.TagName = "img";
            //output.Attributes.Clear();
            //output.Attributes.Add("width", svgImage.Width);
            //output.Attributes.Add("height", svgImage.Height);
            //output.Attributes.Add("alt", alt);
            //output.Attributes.Add("src", new Microsoft.AspNetCore.Html.HtmlString(
            //   String.Format("data:image/svg+xml;{0}", svgImage.Content)));
        }
    }
    public static class ImgConvert
    {
        #region base64转图片
        /// <summary>
        /// 图片上传 Base64解码
        /// </summary>
        /// <param name="dataURL">Base64数据</param>
        /// <param name="imgName">图片名字</param>
        /// <returns>返回一个相对路径</returns>
        public static string DecodeBase64ToImage(this string dataURL, string imgName)
        {
            string path = "";
            String base64 = dataURL.Substring(dataURL.IndexOf(",") + 1);      //将‘,’以前的多余字符串删除
            System.Drawing.Bitmap bitmap = null;//定义一个Bitmap对象,接收转换完成的图片

            try//会有异常抛出,try,catch一下
            {

                byte[] arr = Convert.FromBase64String(base64);//将纯净资源Base64转换成等效的8位无符号整形数组

                System.IO.MemoryStream ms = new System.IO.MemoryStream(arr);//转换成无法调整大小的MemoryStream对象
                bitmap = new System.Drawing.Bitmap(ms);//将MemoryStream对象转换成Bitmap对象              
                //string url = HttpRuntime.AppDomainAppPath.ToString();
                //string tmpRootDir = System.Web.HttpContext.Current.Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString()); //获取程序根目录 
                string tmpRootDir = AppContext.BaseDirectory;
                string imagesurl2 =Path.Combine(tmpRootDir, imgName + ".jpg");
                path = imagesurl2;
                bitmap.Save(imagesurl2, System.Drawing.Imaging.ImageFormat.Jpeg);//保存到服务器路径
                //bitmap.Save(filePath + ".bmp", System.Drawing.Imaging.ImageFormat.Bmp);
                //bitmap.Save(filePath + ".gif", System.Drawing.Imaging.ImageFormat.Gif);
                //bitmap.Save(filePath + ".png", System.Drawing.Imaging.ImageFormat.Png);
                ms.Close();//关闭当前流,并释放所有与之关联的资源
                bitmap.Dispose();
            }
            catch (Exception e)
            {
                string massage = e.Message;
            }
            return path;//返回相对路径
        }
        #endregion

        #region 图片转base64
        /// <summary>
        /// 图片转base64
        /// </summary>
        /// <param name="path">图片路径</param><br>        
        /// <returns>返回一个base64字符串</returns>
        public static string DecodeImageToBase64(this string path)
        {
            if (!File.Exists(path)) {
                return "";
            }
            string base64str = "";
            try
            {
                //读图片转为Base64String
                System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(path);
                //System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(path);
                MemoryStream ms = new MemoryStream();
                bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                byte[] arr = new byte[ms.Length];
                ms.Position = 0;
                ms.Read(arr, 0, (int)ms.Length);
                ms.Close();
                bmp.Dispose();
                base64str = Convert.ToBase64String(arr);
            }
            catch (Exception e)
            {
                string mss = e.Message;
            }
            return "data:image/jpg;base64," + base64str;
        }
        #endregion
    }

  

使用

string url="存入二维码的值";
string qrCode = BarcodeGenerator.GeneratePng(url, ZXing.BarcodeFormat.QR_CODE, 150, 150, 0, url);
String base64 = qrCode.Substring(qrCode.IndexOf(",") + 1);
byte[] arr = Convert.FromBase64String(base64);
var filePath = qrCode.DecodeBase64ToImage("图片名称");

 

posted @ 2019-12-10 18:18  Cein  阅读(774)  评论(0编辑  收藏  举报