asp.net 生成、解析条形码和二维码
原文?asp.net 生成、解析條形碼和二維碼
一、條形碼
一維碼,俗稱條形碼,廣泛的用于電子工業(yè)等行業(yè)。比如我們常見的書籍背面就會有條形碼,通過掃描槍等設(shè)備掃描就可以獲得書籍的ISBN(International standard book number,國際標準書號)。編碼方式也很多,比如Code39和Code128等等,這兩個編碼的類代碼見code39和code128,摘自于互聯(lián)網(wǎng),稍加修改(比如文字置于條碼的中間位置)。讀者可以直接拷貝自項目中使用,這里簡單演示一下,以Code128為例。
?
Code128 code = new Code128();code.ValueFont = new Font("Arial", 7);//聲明條碼下方的字體Bitmap bitMap = code.GetCodeImage(tf6_PERSONIDNUM.Text.Trim(), Code128.Encode.Code128A);//通過對文本框的文件進行Code128編碼獲得位圖string fileName = Server.MapPath("~") + "Images\\QRImages\\" + tf6_PERSONIDNUM.Text.Trim() + ".jpg";//獲取圖片路徑bitMap.Save(fileName, ImageFormat.Jpeg);//保存圖片this.QRCodeImage.ImageUrl = "~/Images/QRImages/" + tf6_PERSONIDNUM.Text.Trim() + ".jpg";//圖片控件顯示?
Code39的類使用方法類似。由于Code39編碼使用較為廣泛,網(wǎng)上也有很多封裝好的dll可直接使用,比如BarCode,直接引用dll即可。
引用BarCode方式的代碼:
?
BarcodeControl barcode = new BarcodeControl();barcode.BarcodeType = BarcodeType.CODE128C;barcode.CopyRight = ""; // 空字符串就會不顯示標題;barcode.Data = tf6_PERSONIDNUM.Text.Trim();MemoryStream stream = new MemoryStream();barcode.MakeImage(ImageFormat.Png, 1, 1, true, false, null, stream);Bitmap bitMap = new Bitmap(stream);string fileName = Server.MapPath("~") + "Images\\QRImages\\" + tf6_PERSONIDNUM.Text.Trim() + ".jpg";bitMap.Save(fileName, ImageFormat.Jpeg);this.QRCodeImage.ImageUrl = "~/Images/QRImages/" + tf6_PERSONIDNUM.Text.Trim() + ".jpg";?
最后上個效果圖:
二、二維碼
二維碼現(xiàn)在越來越流行,可以使用手機上或其它移動終端上的二維碼掃描器軟件對著二維碼一掃,就可以得到相關(guān)信息。在互聯(lián)網(wǎng)站上,可以找到很多二維碼的工具,甚至還有不少在線生成、解析二維碼的網(wǎng)站。在業(yè)務系統(tǒng)當中,比如檔案管理系統(tǒng)中,以前一般都是通過條形碼(一維碼)來存儲檔案職工的基本信息,但是存儲容量有限。而現(xiàn)在完全可以使用二維碼存儲更多容量的信息。
我們這里使用了ThoughtWorks.QRCode.dll這個類庫,在asp.net項目中引用這個dll文件,就可以使用相關(guān)API進行開發(fā)。
比如,我們封裝了一個最精簡的類:
?
/// <summary>/// 二維碼助手類/// </summary>public class QRCodeOp{/// <summary>/// 生成二維碼/// </summary>/// <param name="qrCodeContent">要編碼的內(nèi)容</param>/// <returns>返回二維碼位圖</returns>public static Bitmap QRCodeEncoderUtil(string qrCodeContent){QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();qrCodeEncoder.QRCodeVersion = 0;Bitmap img = qrCodeEncoder.Encode(qrCodeContent, Encoding.UTF8);//指定utf-8編碼, 支持中文return img;}/// <summary>/// 解析二維碼/// </summary>/// <param name="bitmap">要解析的二維碼位圖</param>/// <returns>解析后的字符串</returns>public static string QRCodeDecoderUtil(Bitmap bitmap){QRCodeDecoder decoder = new QRCodeDecoder();string decodedString = decoder.decode(new QRCodeBitmapImage(bitmap), Encoding.UTF8);//指定utf-8編碼, 支持中文return decodedString;}}使用上面兩個方法,就可以生成和解析二維碼。
?
我們在程序中調(diào)用的時候,就可以這樣。
?
protected void EncodeClick(object sender, DirectEventArgs e){StringBuilder sb = new StringBuilder();sb.Append(tf6_PERSONIDNUM.Text.Trim() + ";");//個人身份證號sb.Append(tf_DAID.Text.Trim() + ";");sb.Append(tf_DANAME.Text.Trim() + ";");sb.Append(cb_DABUSKIND.Text.Trim() + ";");sb.Append(cb_DAKIND.Text.Trim() + ";");sb.Append(cb_DALEVELCODE.Text.Trim() + ";");sb.Append(df_DABUILDTIME.Text.Trim() + ";");sb.Append(tf_DAORG.Text.Trim() + ";");sb.Append(cb_DASTATUS.Text.Trim() + ";");sb.Append(tf_DABUILDER.Text.Trim() + ";");sb.Append(tf_DABUILDORG.Text.Trim() + ";");Bitmap bitmap = QRCodeOp.QRCodeEncoderUtil((sb.ToString().Trim()));//調(diào)用二維碼編碼方法生成位圖string fileName = Server.MapPath("~") + "Images\\QRImages\\" + tf6_PERSONIDNUM.Text.Trim() + ".jpg";bitmap.Save(fileName);//保存位圖,文件名為個人身份證號this.QRCodeImage.ImageUrl = "~/Images/QRImages/" + tf6_PERSONIDNUM.Text.Trim() + ".jpg";//顯示圖片X.Msg.Alert("二維碼信息", QRCodeOp.QRCodeDecoderUtil(bitmap)).Show();//調(diào)用二維碼解碼方法彈出編碼之前的信息}這里我在項目中用的是Ext.NET組件。X.Msg.Alert和QRCodeImage.ImageUrl以及DicrectEventArgs這些并不是很重要,感興趣的讀者可以去ext.net網(wǎng)站查閱ext.net的相關(guān)知識。
?
看下效果:
點擊按鈕,我們把文本框中的信息(含數(shù)字、字母、中文、時間等),生成了二維碼圖片,并反過來進行了解析。
讀者可以在此基礎(chǔ)之上進一步封裝擴展,與WCF等技術(shù)結(jié)合,提供一個二維碼生成的web service。
posted on 2013-12-25 22:11 NET未來之路 閱讀(...) 評論(...) 編輯 收藏轉(zhuǎn)載于:https://www.cnblogs.com/lonelyxmas/p/3491471.html
總結(jié)
以上是生活随笔為你收集整理的asp.net 生成、解析条形码和二维码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android四中启动模式
- 下一篇: Kali Linux渗透测试实战 2.2