ساخت QR Code با استفاده ازZXING.NET در ASP.NET Core

یکشنبه 28 خرداد 1396

در این مقاله، نحوه ساخت یک تولید کننده QR Code در ASP.NET Core 1.0 با کمک کتابخانه Zxing.Net به صورت کامل و به همراه یک مثال عملی آموزش داده می شود.

ساخت QR Code با استفاده ازZXING.NET در ASP.NET Core

مقدمه

برای ساخت QR Code در ASP.NET Core کتابخانه های زیادی وجود دارد، ولی اکثر آنها دارای مشکل و خطاهایی هستند. از بین این کتابخانه ها، کتابخانه Zxing.Net برای ساخت QR Code بسیار مناسب است و عملکرد خوبی دارد. این کتابخانه توانایی decode و تولید بارکد ها را دارد.

قبل از خواندن این مقاله، نیاز است که شما به اصول اولیه ASP.NET Core آشنا باشید.

Zxing.Net

این کتابخانه توانایی decode و تولید بارکدهای مختلفی مثل QR Code، PDF 417، EAN، UPC، Aztec، Data Matrix و Codabar را دارد.

Assembly  های مورد نیاز

Assembly هایی که در زیر آورده شده اند برای استفاده از QR Code Generator لازم هستند.

using Microsoft.AspNetCore.Razor.TagHelpers;  
using System;  
using System.IO;  
using ZXing.QrCode;  

بسته های مورد نیاز

بسته های زیر برای ساخت و نمایش QR Code ها در برنامه نیاز است.

"CoreCompat.System.Drawing": "1.0.0-beta006",    
"ZXing.Net": "0.15.0"  

C#

در داخل برنامه یک کلاس با نام QRCodeTagHelper  لازم داریم، که محتویات این کلاس مانند کد زیر است.

namespace QRCode {  
    [HtmlTargetElement("qrcode")]  
    public class QRCodeTagHelper: TagHelper {  
        public override void Process(TagHelperContext context, TagHelperOutput output) {  
            var QrcodeContent = context.AllAttributes["content"].Value.ToString();  
            var alt = context.AllAttributes["alt"].Value.ToString();  
            var width = 250; // width of the Qr Code    
            var height = 250; // height of the Qr Code    
            var margin = 0;  
            var qrCodeWriter = new ZXing.BarcodeWriterPixelData {  
                Format = ZXing.BarcodeFormat.QR_CODE,  
                    Options = new QrCodeEncodingOptions {  
                        Height = height, Width = width, Margin = margin  
                    }  
            };  
            var pixelData = qrCodeWriter.Write(QrcodeContent);  
            // 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    
            using(var bitmap = new System.Drawing.Bitmap(pixelData.Width, pixelData.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb))  
            using(var ms = new MemoryStream()) {  
                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", width);  
                output.Attributes.Add("height", height);  
                output.Attributes.Add("alt", alt);  
                output.Attributes.Add("src", String.Format("data:image/png;base64,{0}", Convert.ToBase64String(ms.ToArray())));  
            }  
        }  
    }  
}   

Index.chtml

قطعه کد زیر، QR Code ساخته شده را به کاربر نمایش می دهد.

@{  
    ViewData["Title"] = "Home";  
}  
   
<h2>@ViewData["Title"].</h2>  
<h3>@ViewData["Message"]</h3>  
   
A library which supports decoding and generating of barcodes (like QR Code, PDF 417, EAN, UPC, Aztec, Data Matrix, Codabar) within images.  
   
<qrcode alt="QR Code" content="https://barnamenevisan.org/" />  
 https://barnamenevisan.org/  

_ViewImports.cshtml

این قطعه کد باعث تزریق TagHelper به کل برنامه می شود.

@addTagHelper "*, QRCode"  

project.json

وابستگی هایی که در زیر آورده شده اند برای ساخت برنامه QR Code لازم هستند.

{  
  "dependencies": {  
    "Microsoft.AspNetCore.Diagnostics": "1.0.0",  
    "Microsoft.AspNetCore.Mvc": "1.1.2",  
    "Microsoft.AspNetCore.Mvc.Core": "1.1.2",  
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",  
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.1",  
    "Microsoft.AspNetCore.StaticFiles": "1.1.1",  
    "Microsoft.Extensions.Logging.Console": "1.0.0",  
    "CoreCompat.System.Drawing": "1.0.0-beta006",  
    "ZXing.Net": "0.15.0"  
  },  
   
  "tools": {  
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"  
  },  
   
  "frameworks": {  
    "net452": { }  
  },  
   
  "buildOptions": {  
    "emitEntryPoint": true,  
    "preserveCompilationContext": true  
  },  
   
  "publishOptions": {  
    "include": [  
      "wwwroot",  
      "web.config"  
    ]  
  },  
   
  "scripts": {  
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]  
  }  
}  

خروجی

آموزش asp.net mvc

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید