建議收藏備用:.net core使用QRCoder生成普通二維碼和帶Logo的二維碼詳細使用教程,源碼已更新至開源模板

来源:https://www.cnblogs.com/jiyuwu/archive/2019/11/12/11841091.html
-Advertisement-
Play Games

隨著互聯網越來越生活化,二維碼的使用越來越普遍,不論是掃碼支付還是掃碼關註引流,似乎我們總是離不開二維碼,那麼很多需要推廣的文章或社區想要自己的二維碼,那麼你是不是需要在網站直接提供給用戶呢?很多開發者就在網上百度解決方案,邊做邊踩坑,甚至很多人寫的開發案例都是截圖或者類庫引用都沒說清楚,在這個摸索 ...


隨著互聯網越來越生活化,二維碼的使用越來越普遍,不論是掃碼支付還是掃碼關註引流,似乎我們總是離不開二維碼,那麼很多需要推廣的文章或社區想要自己的二維碼,那麼你是不是需要在網站直接提供給用戶呢?很多開發者就在網上百度解決方案,邊做邊踩坑,甚至很多人寫的開發案例都是截圖或者類庫引用都沒說清楚,在這個摸索的途中造成很多時間上的浪費。

尤其是嘗試新技術那些舊的操作還會有所改變,為了節約開發時間,我們把解決方案收入到一個個demo中,方便以後即拿即用。而且這些demo有博客文檔支持,幫助任何人非常容易上手開發跨平臺的.net core。隨著時間的推移,我們的demo庫會日益強大請及時收藏GitHub

一、首先在Common公用項目中引用QRCoder類庫

 Install-Package QRCoder -Version 1.3.3

二、在Common公用項目中創建QRCoderHelper類

        #region 普通二維碼
        /// <summary>
        /// 
        /// </summary>
        /// <param name="url">存儲內容</param>
        /// <param name="pixel">像素大小</param>
        /// <returns></returns>
        public static Bitmap GetPTQRCode(string url, int pixel)
        {
            QRCodeGenerator generator = new QRCodeGenerator();
            QRCodeData codeData = generator.CreateQrCode(url, QRCodeGenerator.ECCLevel.M, true);
            QRCoder.QRCode qrcode = new QRCoder.QRCode(codeData);
            Bitmap qrImage = qrcode.GetGraphic(pixel, Color.Black, Color.White, true);
            return qrImage;
        }
        #endregion

        #region 帶logo的二維碼
        /// <summary>
        /// 
        /// </summary>
        /// <param name="url">存儲內容</param>
        /// <param name="pixel">像素大小</param>
        /// <returns></returns>
        public static Bitmap GetLogoQRCode(string url,string logoPath, int pixel)
        {
            QRCodeGenerator generator = new QRCodeGenerator();
            QRCodeData codeData = generator.CreateQrCode(url, QRCodeGenerator.ECCLevel.M, true);
            QRCoder.QRCode qrcode = new QRCoder.QRCode(codeData);
            Bitmap icon = new Bitmap(logoPath);
            Bitmap qrImage = qrcode.GetGraphic(pixel, Color.Black, Color.White, icon,15,6, true);
            #region 參數介紹
            //GetGraphic方法參數介紹
            //pixelsPerModule //生成二維碼圖片的像素大小 ,我這裡設置的是5
            //darkColor       //暗色   一般設置為Color.Black 黑色
            //lightColor      //亮色   一般設置為Color.White  白色
            //icon             //二維碼 水印圖標 例如:Bitmap icon = new Bitmap(context.Server.MapPath("~/images/zs.png")); 預設為NULL ,加上這個二維碼中間會顯示一個圖標
            //iconSizePercent  //水印圖標的大小比例 ,可根據自己的喜好設置
            //iconBorderWidth  // 水印圖標的邊框
            //drawQuietZones   //靜止區,位於二維碼某一邊的空白邊界,用來阻止讀者獲取與正在瀏覽的二維碼無關的信息 即是否繪畫二維碼的空白邊框區域 預設為true
            #endregion
            return qrImage;
        }
        #endregion

註意:如果你想做其它調整可以參考我第二個方法中的參數介紹進行設置,考慮到大家的難處,我把那些相關參數幫各位查了。

三、添加QRCodeController控制器處理請求並返回二維碼圖片

private readonly IWebHostEnvironment webHostEnvironment;
        //private readonly IHostingEnvironment _hostingEnvironment; 3.0之前使用它
        public QRCodeController(IWebHostEnvironment _webHostEnvironment)
        {
            webHostEnvironment=_webHostEnvironment;
        }
        public IActionResult Index()
        {
            return View();
        }
        public IActionResult GetPTQRCode(string url, int pixel=5)
        {
            url = HttpUtility.UrlDecode(url);
            Response.ContentType = "image/jpeg";

            var bitmap = QRCoderHelper.GetPTQRCode(url, pixel);
            MemoryStream ms = new MemoryStream();
            bitmap.Save(ms, ImageFormat.Jpeg);
            return File(ms.ToArray(), "image/png");
        }
        public IActionResult GetLogoQRCode(string url,string logoPath, int pixel = 5)
        {
            url = HttpUtility.UrlDecode(url);
            logoPath= webHostEnvironment.WebRootPath + HttpUtility.UrlDecode(logoPath);
            Response.ContentType = "image/jpeg";

            var bitmap = QRCoderHelper.GetLogoQRCode(url, logoPath, pixel);
            MemoryStream ms = new MemoryStream();
            bitmap.Save(ms, ImageFormat.Jpeg);
            return File(ms.ToArray(), "image/png");
        }

註意:其中IHostingEnvironment是.net core 3.0之前使用獲取目錄位置的,而我們.net core 3.0已經由IHostingEnvironment變更為IWebHostEnvironment來獲取了。

四、前端請求設計

<link href="~/Lib/Mobile/jquery.mobile-1.4.5.min.css" rel="stylesheet" />
<script src="~/Lib/Mobile/jquery.mobile-1.4.5.min.js"></script>
<script type="text/javascript">
    $(function () {
        PTCreate();
        LogoCreate();
    });
    function PTCreate() {
        pt = escape($("#PT").val());//防止中文等特殊字元引起問題
        ptSize = $("#PTSize").val();
        var id = document.getElementById("PTImg");
        var str = "../QRCode/GetPTQRCode?url=" + pt + "&pixel=" + ptSize + "&random=" + Math.random();
        id.setAttribute("src", str);
    }
    function LogoCreate() {
        logo = escape($("#Logo").val());
        logoPath = escape($("#LogoPath").val());
        logoSize = $("#LogoSize").val();
        var id = document.getElementById("LogoImg");
        var str = "../QRCode/GetLogoQRCode?url=" + logo + "&logoPath=" + logoPath + "&pixel=" + logoSize + "&random=" + Math.random();
        id.setAttribute("src", str);
    }
</script>
<div style="width:60%; margin:auto;text-align:center;">
    <h2>普通二維碼</h2>
    <input type="text" class="form-control" id="PT" placeholder="請輸入字元" value="www.jiyuwu.com"><button onclick="PTCreate();">生成</button>
    <input type="range" name="points" id="PTSize" value="5" min="1" max="20" onchange="PTCreate();">
    <br />
    <img id="PTImg" />
    <h2>Logo二維碼</h2>
    <input type="text" class="form-control" id="Logo" placeholder="請輸入字元" value="www.jiyuwu.com">
    <input type="text" class="form-control" id="LogoPath" placeholder="logo位置" value="\Lib\Markdown\images\logos\editormd-logo-32x32.png">
    <button onclick="LogoCreate();">生成</button>
    <input type="range" name="points" id="LogoSize" value="5" min="1" max="20" onchange="LogoCreate();">
    <img id="LogoImg" />
</div>

五、那麼看下效果吧

開源地址 動動小手,點個推薦吧!

 

註意:我們機遇屋該項目將長期為大家提供asp.net core各種好用demo,旨在幫助.net開發者提升競爭力和開發速度,建議儘早收藏該模板集合項目


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、.MemoryCache介紹 MemoryCache是.Net Framework 4.0開始提供的記憶體緩存類,使用該類型可以方便的在程式內部緩存數據並對於數據的有效性進行方便的管理, 它通過在記憶體中緩存數據和對象來減少讀取資料庫的次數,從而減輕資料庫負載,加快數據讀取速度,提升系統的性能。 二 ...
  • .Net Core Vue Qucik Start =========================== This is a ASP.NET Core 3.0 project seamlessly integrationed with Vue.js template. A complaint fr ...
  • 前言 Microsoft.AspNetCore.ConcurrencyLimiter AspNetCore3.0後增加的,用於傳入的請求進行排隊處理,避免線程池的不足. 我們日常開發中可能常做的給某web伺服器配置連接數以及,請求隊列大小,那麼今天我們看看如何在通過中間件形式實現一個併發量以及隊列長 ...
  • 我們的需求是什麼? 答:需要在圖片上增加一些自定義標記,例如:2個圖片對比時,對相同區域進行高亮。 先上效果圖: 設計思路 1.概述 1.通過TargeUpdated事件,重新繪製圖片進行替換。 2.詳細實現 1.我們先綁定ImageTargetUpdated事件。 根據微軟官方文檔,如上圖,我們需 ...
  • Microsoft Office是微軟公司的一個文字處理器應用程式,作為辦公軟體必不可少的神器之一,其中Word、Excel是日常工作中常用的文檔管理工具。目前,Aspose系列和Spire系列是文檔管理開發API中非常受歡迎的兩個系列產品。 那麼這兩個系列工具性能上有何異同,我們該如何選擇哪一款呢 ...
  • 從篇 abp(net core)+easyui+efcore實現倉儲管理系統——EasyUI前端頁面框架 (十八) 至abp(net core)+easyui+efcore實現倉儲管理系統——EasyUI之貨物管理七(二十五) 為止,我們已經通過EasyUI完成了貨物信息管理的增刪改功能基本實現。現... ...
  • using System; using System.Collections.Generic; using System.Text; namespace test { class Program { static void Main(string[] args) { Date birthday = ...
  • using System; using System.Collections.Generic; using System.Text; namespace test { class Program { static void Main(string[] args) { Time test1 = new ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...