Skip to content

Instantly share code, notes, and snippets.

@relyky
Last active February 16, 2024 06:20
Show Gist options
  • Save relyky/64c59a1a4f237cb9249aa1096d071e98 to your computer and use it in GitHub Desktop.
Save relyky/64c59a1a4f237cb9249aa1096d071e98 to your computer and use it in GitHub Desktop.
c#, barcode, ZXing.Net, code39, code128
///
/// 使用 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