出處:
http://www.dotblogs.com.tw/kyleshen/archive/2013/10/24/125365.aspx
前言
條碼的應用在生活上常常會遇到,其實對於程式來講,他讀出來就是一個字串,所以如果有購買掃描槍的話,等於是一個input裝置,可以把他想成是一個鍵盤,掃成功後等於是個複製貼上的動作,本篇將會Step by Step來實做C#產生條碼圖片。
安裝字型
要做成條碼其實很簡單,網路上有非常多的條碼免費字型可以下載,本篇字型使用的名稱為IDAutomationHC39M,從此
連結下載,下載完後,應該會是個字型檔,直接點選安裝即可,這時候我們可以開個Word,會發現只要改變他的字型,就會變成條碼圖片。
開始實做
知道條碼其實是組字串後,程式也大概也有個方向可以朝向字串轉圖片的方式去實現。本篇將已WebForm的GridView來快速做個簡單的顯示:
Html頁面,需要注意的是,直接在Img指定寬度和高度並不會減小圖片的檔案大小,實際上在產生時要去做等比例縮放才是比較好的做法
01 |
<asp:GridView ID= "gv_data" runat= "server" AutoGenerateColumns= "False" > |
03 |
<asp:BoundField DataField= "barcode" HeaderText= "Barcode字串" /> |
04 |
<asp:TemplateField HeaderText= "條碼圖片" > |
06 |
<img width= "200" height= "65" src= '<%#Eval("Img") %>' /> |
後端在Page Load建立一個DataTable,創造5筆假資料
02 |
DataTable dt = new DataTable(); |
03 |
dt.Columns.Add( "Barcode" ); |
04 |
dt.Columns.Add( "Img" ); |
06 |
for ( int i = 0; i < 5; i++) |
08 |
DataRow dr = dt.NewRow(); |
09 |
dr[ "Barcode" ] = "BC000000" + i; |
10 |
dr[ "Img" ] = GetBarCodeImage( "BC000000" + i); //產生條碼圖片 |
14 |
gv_data.DataSource = dt; |
GetBarCodeImage function主要在對圖片做一些處理,因為本範例為求方便,最終顯示在HTML上是用Base64的方法實現,實際上可以依照需求去修改此塊。
01 |
public string GetBarCodeImage( string BarcodeStr) |
04 |
string SavePath = @"D:\barcode.png" ; |
05 |
//Barcode條碼需在前後加上*字號代表開始與結束 |
06 |
Bitmap barcode = CreateBarCode( "*" + BarcodeStr + "*" ); |
07 |
barcode.Save(SavePath, ImageFormat.Png); |
11 |
using (var fs = new FileStream(SavePath, FileMode.Open, FileAccess.Read)) |
13 |
var buffer = new byte [fs.Length]; |
14 |
fs.Read(buffer, 0, ( int )fs.Length); |
15 |
string base64String = Convert.ToBase64String(buffer); |
16 |
string ImgBase64 = string .Format( "data:image/png;base64,{0}'" , base64String); |
將字串轉為圖片:
04 |
/// <param name="data"></param> |
05 |
/// <returns></returns> |
06 |
public Bitmap CreateBarCode( string data) |
08 |
Bitmap barcode = new Bitmap(1, 1); |
09 |
Font threeOfNine = new Font( "IDAutomationHC39M" , 60, |
10 |
System.Drawing.FontStyle.Regular, |
11 |
System.Drawing.GraphicsUnit.Point); |
13 |
Graphics graphics = Graphics.FromImage(barcode); |
15 |
SizeF dataSize = graphics.MeasureString(data, threeOfNine); |
17 |
barcode = new Bitmap(barcode, dataSize.ToSize()); |
18 |
graphics = Graphics.FromImage(barcode); |
19 |
graphics.Clear(Color.White); |
21 |
graphics.TextRenderingHint = TextRenderingHint.SingleBitPerPixel; |
23 |
graphics.DrawString(data, threeOfNine, new SolidBrush(Color.Black), 0, 0); |
26 |
threeOfNine.Dispose(); |
最終結果
其他應用
學會字串轉圖片,就可以去網路上找很多免費字型,例如這個
網站,來產生一些特殊圖案!
Reference
字型下載
Base64編碼顯示圖片
影像檔等比例縮放