Last active
February 16, 2024 06:20
-
-
Save relyky/64c59a1a4f237cb9249aa1096d071e98 to your computer and use it in GitHub Desktop.
c#, barcode, ZXing.Net, code39, code128
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// | |
/// 使用 ZXing.Net 產生barcode / CODE_39 / CODE_128。 | |
/// ref → [ZXing.Net](https://github.com/micjahn/ZXing.Net) | |
/// ref → https://github.com/relyky/GenBarcode | |
/// | |
using QRCoder; | |
using System; | |
using System.Drawing; | |
using System.IO; | |
using System.Linq; | |
using ZXing; | |
static class Utilities | |
{ | |
#region 商業邏輯層 / 產生QR Code / 產生時間戳章/印章 | |
/// <summary> | |
/// 產生QRCode image blob | |
/// </summary> | |
public static byte[] MakeQRCodeBlob(string text) | |
{ | |
// 產生QR Code | |
using (Bitmap qrCodeImage = MakeQRCodeBitmap(text)) | |
using (var ms = new MemoryStream()) | |
{ | |
qrCodeImage.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp); // 參數點之一 | |
byte[] imgBlob = ms.ToArray(); | |
return imgBlob; | |
} | |
} | |
/// <summary> | |
/// 產生QRCode image | |
/// </summary> | |
public static Bitmap MakeQRCodeBitmap(string text) | |
{ | |
// 產生QR Code | |
QRCodeGenerator qrGenerator = new QRCodeGenerator(); | |
QRCodeData qrCodeData = qrGenerator.CreateQrCode(text, QRCodeGenerator.ECCLevel.Q); // 參數點之一 | |
QRCode qrCode = new QRCode(qrCodeData); | |
Bitmap qrCodeImage = qrCode.GetGraphic(3); // 每單位"點"的大小。還有顏色等參數。 // 參數點之一 | |
return qrCodeImage; | |
} | |
/// <summary> | |
/// 產生時間戳章/印章 timestamp image blob | |
/// </summary> | |
public static byte[] MakeTimestampBlob(string emptyStampImagePath, string stampUnit, string stampDate, string stampStaff) | |
{ | |
//# 載入空白的時戳圖檔 | |
Image stampImage = Image.FromFile(emptyStampImagePath); | |
//# 再打印:單位、日期、人員等資訊 | |
// draw string | |
Graphics g = Graphics.FromImage(stampImage); | |
// Create font and brush. | |
Font drawFont = new Font("Arial", 8, FontStyle.Bold); | |
SolidBrush drawBrush = new SolidBrush(Color.DarkBlue); | |
//// Set format of string. | |
//StringFormat drawFormat = new StringFormat(); | |
//drawFormat.FormatFlags = StringFormatFlags.DirectionVertical; | |
// Draw string to screen. | |
g.DrawString(stampUnit, drawFont, drawBrush, 47.0F, 45.0F); | |
g.DrawString(stampDate, drawFont, drawBrush, 38.0F, 70.0F); | |
g.DrawString(stampStaff, drawFont, drawBrush, 55.0F, 122.0F); | |
// 轉成BLOB | |
byte[] imgBlob = null; | |
using (var ms = new MemoryStream()) | |
{ | |
stampImage.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp); // 參數點之一 | |
imgBlob = ms.ToArray(); | |
} | |
return imgBlob; | |
} | |
#endregion | |
#region 產生 Code39 / Code128 | |
public static Bitmap MakeCode128Bitmap(string asciiString, int height = 50, bool pureBarcode = false, int margin = 20) | |
{ | |
ZXing.BarcodeWriter writer = new ZXing.BarcodeWriter(); | |
writer.Format = ZXing.BarcodeFormat.CODE_128; | |
writer.Options.Height = height; | |
writer.Options.Margin = margin; | |
writer.Options.PureBarcode = pureBarcode; | |
// 填入Options,當有設定的話。 | |
Bitmap bmp = writer.Write(asciiString); | |
return bmp; | |
} | |
public static byte[] MakeCode128Blob(string asciiString, int height = 50, bool pureBarcode = false, int margin = 20) | |
{ | |
using (Bitmap bmp = MakeCode128Bitmap(asciiString, height, pureBarcode, margin)) | |
using (var ms = new MemoryStream()) | |
{ | |
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp); | |
byte[] imgBlob = ms.ToArray(); | |
return imgBlob; | |
} | |
} | |
public static Bitmap MakeCode39Bitmap(string asciiString, int height = 50, bool pureBarcode = false, int margin = 20) | |
{ | |
ZXing.BarcodeWriter writer = new ZXing.BarcodeWriter(); | |
writer.Format = ZXing.BarcodeFormat.CODE_39; | |
writer.Options.Height = height; | |
writer.Options.Margin = margin; | |
writer.Options.PureBarcode = pureBarcode; | |
// 填入Options,當有設定的話。 | |
Bitmap bmp = writer.Write(asciiString); | |
return bmp; | |
} | |
public static byte[] MakeCode39Blob(string asciiString, int height = 50, bool pureBarcode = false, int margin = 20) | |
{ | |
using (Bitmap bmp = MakeCode39Bitmap(asciiString, height, pureBarcode, margin)) | |
using (var ms = new MemoryStream()) | |
{ | |
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp); | |
byte[] imgBlob = ms.ToArray(); | |
return imgBlob; | |
} | |
} | |
/// <summary> | |
/// Bitmap to Byte array | |
/// </summary> | |
public static byte[] Bitmap2Blob(Bitmap bmp) | |
{ | |
using (MemoryStream ms = new MemoryStream()) | |
{ | |
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp); | |
byte[] blob = ms.ToArray(); | |
return blob; | |
} | |
} | |
/// <summary> | |
/// Byte array to Bitmap | |
/// </summary> | |
public static Bitmap Blob2Bitmap(byte[] blob) | |
{ | |
using (MemoryStream ms = new MemoryStream(blob)) | |
{ | |
Bitmap bmp = (Bitmap)Bitmap.FromStream(ms); | |
return bmp; | |
} | |
} | |
#endregion | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment