国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C# QRCode二維碼的解析與生成

這篇具有很好參考價值的文章主要介紹了C# QRCode二維碼的解析與生成。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

  已知一張二維碼圖片,怎么生成一張一模一樣的圖片出來?

  最近有個項目,需要用到QRCode,之前只做過Datamatrix格式的,想著應該也是差不多的,于是就依葫蘆畫瓢,掏出我的陳年OnBarcode類庫,一通修改,生成了個嶄新的QRCode,與客戶提供的二維碼圖片一比對,雖然掃出來內容一樣,但明顯圖案并不相同,于是我就意識到,事情并不簡單。原圖如下:

C# QRCode二維碼的解析與生成

  首先第一個懷疑的就是參數(shù)問題啦,看了一下OnBarcode.Barcode.QRCode的屬性,可疑的參數(shù)有DataMode、ECL、Version等等,畢竟這幾個應該是常見的參數(shù)。最大的可能就是ECL,這個是二維碼的糾錯級別,一般是L/M/Q/H四個等級,對應可遮擋7%/15%/25%/30%,一般如果想在二維碼中插入logo的話,就要把糾錯級別調高一些。

  于是我嘗試了一下,修改了不同的ECL,對應輸出的圖案都是不同的,但還是沒有生成我想要的圖案。

  難道是我的陳年OnBarcode類庫跟不上時代了?于是我換成了QRCoder,又是一通折騰,還是沒對上。再是找了一些在線生成二維碼網(wǎng)站(見下方鏈接),逐個比較,發(fā)現(xiàn)還真是五花八門,有些是不提供設置直接生成,有些是可修改版本及ECL的,最后結果都不太一樣,幸好有些網(wǎng)站生成的圖片是對上了的,總算有條退路。

  既然有了備用方案,那我就可以慢慢研究了。查了下QRCode的生成原理,參考《【來龍去脈系列】QRCode二維碼的生成細節(jié)和原理》,這一篇講得不錯,不過他在講Mask那里有點模糊,這也導致我一不留神就掉坑了,后面看了另外兩篇才糾正回來。看完大概有了概念,至少明確了,我這個碼應該是version1,Alphanumeric mode 字符編碼,同時也知道還有個掩碼參數(shù)(即Mask),而且從圖案中可以看到Format Information,那里面存放著ECL跟Mask。文中將Format Information標注0-14,在左上角從上往下從右往左,并且說15個bits中包括5個數(shù)據(jù)bits:其中,2個bits用于表示使用什么樣的Error Correction Level, 3個bits表示使用什么樣的Mask,那我自然就認為0-4就是所謂的數(shù)據(jù)bits了,看了下是11100,跟10101異或得出01001,ECL是01-L?但我在線生成的時候是選的H,那就肯定不對。

  這時候我發(fā)現(xiàn)有個在線生成網(wǎng)站寫明了用的是ZXing,于是我又引用了ZXing嘗試了一下,按照常規(guī)的參數(shù)配置了ECL-H,還是不行,一度陷入瓶頸。

  我還突發(fā)奇想試著把原圖上傳到在線網(wǎng)站去解析,說不定有哪個網(wǎng)站能給出點提示,但最終也只是能看到內容。不過這么一來我又打開了思路,我可以自己解析,說不定就能拿到配置參數(shù)了,感覺可行性還是有的。

  剛好ZXing就有解碼的功能,嘗試一下:

 1 static void ParseQRCode(string imagePath, out string data, out IDictionary<ResultMetadataType, object> hints)
 2         {
 3             hints = null;
 4             BarcodeReader reader = new BarcodeReader();
 5             reader.Options.PossibleFormats = new List<BarcodeFormat> { BarcodeFormat.QR_CODE };//可加可不加
 6             Bitmap bitmap = new Bitmap(imagePath);
 7             Result result = reader.Decode(bitmap);
 8             if (result != null)
 9             {
10                 data = result.Text;
11                 hints = result.ResultMetadata;
12             }
13             else
14             {
15                 data = null;
16             }
17         }

  輸入圖片路徑,找了一下result的屬性,果然在ResultMetadata里面存放著我要的信息:

C# QRCode二維碼的解析與生成

?  ECL是H,那就沒錯了,剩下的參數(shù)里面,這個QR_MASK_PATTERN不就是掩碼參數(shù)咯,剩下兩個看了下參數(shù)介紹,應該不是很重要,于是重點關注QR_MASK_PATTERN。剛好手頭的代碼引用的是ZXing,這里要注意的是,ZXing的Hints是不能整個賦值的,只能用Add的方式逐個插入?yún)?shù):

 1 public static Bitmap CreateQRCode(string data)
 2         {
 3             Bitmap bitmap = null;
 4             GC.Collect();
 5             BarcodeWriter barCodeWriter = new BarcodeWriter();
 6             barCodeWriter.Format = BarcodeFormat.QR_CODE; // 生成碼的方式(這里設置的是二維碼),有條形碼\二維碼\還有中間嵌入圖片的二維碼等
 7             //barCodeWriter.Options.Hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8");// 支持中文字符串
 8             barCodeWriter.Options.Hints.Add(EncodeHintType.ERROR_CORRECTION, ZXing.QrCode.Internal.ErrorCorrectionLevel.H);
 9             barCodeWriter.Options.Hints.Add(EncodeHintType.QR_MASK_PATTERN, 2);
10             barCodeWriter.Options.Height = 200;
11             barCodeWriter.Options.Width = 200;
12             barCodeWriter.Options.Margin = 0; //設置的白邊大小
13             ZXing.Common.BitMatrix bm = barCodeWriter.Encode(data);
14             bitmap = barCodeWriter.Write(bm);
15             return bitmap;
16         }

  果然,結果跟原圖一樣(外面的圈是我自己加的):

C# QRCode二維碼的解析與生成

  問題已經(jīng)解決了,但我還是有個疑惑,為什么我根據(jù)圖案的Format Information得出的參數(shù)是不對的,于是我繼續(xù)翻資料,終于在《[譯] 為程序員寫的Reed-Solomon碼解釋》這一篇里面看到了,是逆時針讀的bit,wxxxx,最開始看的那一篇是順時針標注的啊,那不就是反過來,仔細一看,讀出來是00111,跟10101異或得10010,ECL是10-H,Mask是010-2,對上了。只能說,還是得多方考證吧。

  完結撒花。

?

  • 參考資料:

《【來龍去脈系列】QRCode二維碼的生成細節(jié)和原理》 https://www.cnblogs.com/tuyile006/p/10916075.html

《二維碼生成原理》 https://zhuanlan.zhihu.com/p/543574464

《[譯] 為程序員寫的Reed-Solomon碼解釋》 https://www.felix021.com/blog/read.php?2116

《C# 生成二維碼方法(QRCoder)》 https://www.cnblogs.com/yakniu/p/16917897.html

《.NET Core(C#)使用ZXing.Net生成條碼(Barcode)和二維碼(QR code)圖片及示例代碼》 https://www.cnblogs.com/fireicesion/p/16809637.html

《C# 利用ZXing.Net來生成條形碼和二維碼》 https://blog.csdn.net/lwf3115841/article/details/128429605

  • 在線工具:

OSCHINA https://tool.oschina.net/qr

互聯(lián)二維碼 https://www.hlcode.cn/decode

草料二維碼 https://cli.im/text

二維碼工坊 https://www.2weima.com/?text=A0010101文章來源地址http://www.zghlxwxcb.cn/news/detail-655545.html

到了這里,關于C# QRCode二維碼的解析與生成的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 詳解Python生成二維碼插件QrCode的使用

    二維碼(QR Code)是一種常見的矩陣型條碼,被廣泛用于掃碼支付、產(chǎn)品標識、活動推廣等領域。Python提供了許多第三方庫用于生成和解析二維碼,其中最常用的是qrcode庫。本文將介紹如何使用qrcode庫來生成二維碼,并提供相應的代碼示例和詳細說明。 在開始之前,我們需要

    2024年02月16日
    瀏覽(29)
  • tki-qrcode插件二維碼的生成

    tki-qrcode插件二維碼的生成

    1、全局安裝tki-qrcode插件 2、查看下載插件后的版本信息 3、在頁面中引入tki-qrcode 4、生成二維碼整體代碼 5、效果展示 此樣式是平時黑色二維碼樣式,此為打過馬賽克的二維碼(不打馬賽克博客無法展示圖片,無奈(O~O) 注: 二維碼中的內容可綁定鏈接和其他內容值 根據(jù)自

    2024年02月09日
    瀏覽(26)
  • vue:生成二維碼 qrcode、vue-qr(二維碼中間可帶logo)

    vue:生成二維碼 qrcode、vue-qr(二維碼中間可帶logo)

    一、方法一 qrcode qrcode - npm 1.1、安裝 yarn add qrcode 1.2、頁面引入 1.3、方法里邊使用 ?二維碼url: ???????? 1.4、options 名稱 類型 默認值 說明 errorCorrectionLevel String M 錯誤處理級別。可選值: low ,? medium ,? quartile ,? high ?or? L ,? M ,? Q ,? H maskPattern Number 可選值: 0 ,?

    2023年04月12日
    瀏覽(28)
  • 動態(tài)二維碼生成器PHP Dynamic QRcode

    動態(tài)二維碼生成器PHP Dynamic QRcode

    什么是 PHP Dynamic QRcode ? PHP Dynamic QRcode 是一個允許生成和保存動態(tài)和靜態(tài)二維碼( QR 碼)的應用。它具有簡潔、響應靈敏且用戶友好的設計。其中包含您網(wǎng)站中可能需要的一般功能,如:記錄管理( CRUD )、安全身份驗證、分頁、過濾器。 什么是 Dynamic Qr codes ? Dynamic Qr co

    2024年02月11日
    瀏覽(24)
  • vue3 qrcode 生成二維碼展示 親測可用

    網(wǎng)上找的好多vue3 生成二維碼代碼都不能用,正確辦法如下 安裝 script template

    2024年02月09日
    瀏覽(26)
  • Qrcode前端生成二維碼,列表循環(huán),可以下載分享,附加功能

    Qrcode前端生成二維碼,列表循環(huán),可以下載分享,附加功能

    前言:? ? ? ? ? 項目需求,原型列表要求展示二維碼,然后后端那邊因為某種原因沒有給我返回這個參數(shù),無奈只好前端自己來做,于是乎便有了下面的操作,這篇文章來整理下。 ????????主要功能: ? ? ? ? ? ? ? ? 1.生成二維碼 ? ? ? ? ? ? ? ? 2.渲染列表 ? ? ? ?

    2024年02月03日
    瀏覽(25)
  • 微信小程序生成二維碼(weapp-qrcode)

    插件 npm 地址:https://www.npmjs.com/package/weapp-qrcode 插件 GitHub 地址:https://github.com/yingye/weapp-qrcode/tree/master 一、引入 1、根據(jù) GitHub 指引將 weapp-qrcode 放到本地 uitl 文件夾下; 2、創(chuàng)建 canvas 3、在 js 文件中引入 weapp-qrcode 以及使用; 這里是添加了 logo 的二維碼;相關參數(shù)請參考

    2024年02月15日
    瀏覽(41)
  • 微信小程序生成二維碼插件weapp-qrcode.js

    首先創(chuàng)建weapp-qrcode.js文件 然后復制一下內容到weapp-qrcode.js文件 然后在index.wxml文件寫入 在index.js文件寫入 效果如下: ?

    2024年02月12日
    瀏覽(21)
  • JavaScript 中生成二維碼,你可以使用第三方庫,其中最流行和廣泛使用的是 QRCode.js。以下是使用 QRCode.js 生成二維碼的基本步驟:

    要在 JavaScript 中生成二維碼,你可以使用第三方庫,其中最流行和廣泛使用的是 QRCode.js。以下是使用 QRCode.js 生成二維碼的詳細的步驟如下: 步驟 1: 引入 QRCode.js 庫 首先,將 QRCode.js 庫引入到你的 HTML 文件中。你可以從 CDN 上獲取它: 步驟 2: 創(chuàng)建容器 在頁面中創(chuàng)建一個容器

    2024年01月18日
    瀏覽(106)
  • 微信小程序生成二維碼(weapp-qrcode)可添加logo

    插件 npm 地址:https://www.npmjs.com/package/weapp-qrcode 插件 GitHub 地址:https://github.com/yingye/weapp-qrcode/tree/master 一、引入 1、根據(jù) GitHub 指引將 weapp-qrcode 放到本地 uitl 文件夾下; 2、創(chuàng)建 canvas 3、在 js 文件中引入 weapp-qrcode 以及使用; 這里是添加了 logo 的二維碼;相關參數(shù)請參考

    2024年02月15日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包