[轉貼] 如何利用C#產生條碼圖片

2018070810:37
出處:http://www.dotblogs.com.tw/kyleshen/archive/2013/10/24/125365.aspx
 

前言

條碼的應用在生活上常常會遇到,其實對於程式來講,他讀出來就是一個字串,所以如果有購買掃描槍的話,等於是一個input裝置,可以把他想成是一個鍵盤,掃成功後等於是個複製貼上的動作,本篇將會Step by Step來實做C#產生條碼圖片。

安裝字型

要做成條碼其實很簡單,網路上有非常多的條碼免費字型可以下載,本篇字型使用的名稱為IDAutomationHC39M,從此連結下載,下載完後,應該會是個字型檔,直接點選安裝即可,這時候我們可以開個Word,會發現只要改變他的字型,就會變成條碼圖片。
b

開始實做

知道條碼其實是組字串後,程式也大概也有個方向可以朝向字串轉圖片的方式去實現。本篇將已WebForm的GridView來快速做個簡單的顯示:
Html頁面,需要注意的是,直接在Img指定寬度和高度並不會減小圖片的檔案大小,實際上在產生時要去做等比例縮放才是比較好的做法
01 <asp:GridView ID="gv_data" runat="server" AutoGenerateColumns="False">
02     <Columns>
03         <asp:BoundField DataField="barcode" HeaderText="Barcode字串" />
04         <asp:TemplateField HeaderText="條碼圖片">
05             <ItemTemplate>
06                 <img width="200" height="65" src='<%#Eval("Img") %>'  />
07             </ItemTemplate>
08         </asp:TemplateField>
09     </Columns>
10 </asp:GridView>


後端在Page Load建立一個DataTable,創造5筆假資料
01 //產生五筆資料顯示
02 DataTable dt = new DataTable();
03 dt.Columns.Add("Barcode");
04 dt.Columns.Add("Img");
05  
06 for (int i = 0; i < 5; i++)
07 {
08     DataRow dr = dt.NewRow();
09     dr["Barcode"] = "BC000000" + i;
10     dr["Img"] = GetBarCodeImage("BC000000" + i);//產生條碼圖片
11     dt.Rows.Add(dr);
12 }
13  
14 gv_data.DataSource = dt;
15 gv_data.DataBind();


GetBarCodeImage function主要在對圖片做一些處理,因為本範例為求方便,最終顯示在HTML上是用Base64的方法實現,實際上可以依照需求去修改此塊。
01 public string GetBarCodeImage(string BarcodeStr)
02 {
03     //產生圖片檔案
04     string SavePath = @"D:\barcode.png";
05     //Barcode條碼需在前後加上*字號代表開始與結束
06     Bitmap barcode = CreateBarCode("*" + BarcodeStr + "*");
07     barcode.Save(SavePath, ImageFormat.Png);
08     barcode.Dispose();
09  
10     //將圖片檔案轉成Base64字串
11     using (var fs = new FileStream(SavePath, FileMode.Open, FileAccess.Read))
12     {
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);
17         return ImgBase64;
18     }
19 }


將字串轉為圖片:
01 /// <summary>
02 /// 將字串轉為Barcode圖片
03 /// </summary>
04 /// <param name="data"></param>
05 /// <returns></returns>
06 public Bitmap CreateBarCode(string data)
07 {
08     Bitmap barcode = new Bitmap(1, 1);
09     Font threeOfNine = new Font("IDAutomationHC39M", 60,
10                             System.Drawing.FontStyle.Regular,
11                             System.Drawing.GraphicsUnit.Point);
12  
13     Graphics graphics = Graphics.FromImage(barcode);
14  
15     SizeF dataSize = graphics.MeasureString(data, threeOfNine);
16  
17     barcode = new Bitmap(barcode, dataSize.ToSize());
18     graphics = Graphics.FromImage(barcode);
19     graphics.Clear(Color.White);
20  
21     graphics.TextRenderingHint = TextRenderingHint.SingleBitPerPixel;
22  
23     graphics.DrawString(data, threeOfNine, new SolidBrush(Color.Black), 0, 0);
24  
25     graphics.Flush();
26     threeOfNine.Dispose();
27     graphics.Dispose();
28  
29     return barcode;
30  
31 }


最終結果
image

其他應用

學會字串轉圖片,就可以去網路上找很多免費字型,例如這個網站,來產生一些特殊圖案!

Reference
字型下載
Base64編碼顯示圖片
影像檔等比例縮放