最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

基于ZXing.Net生成一維二維碼

2021-05-25 21:10 作者:付工上位機實戰(zhàn)  | 我要投稿

最近很多小伙伴對一維碼、二維碼比較感興趣,今天主要給大家分享一個C#生成條形碼和二維碼的案例。

C#作為一個高級語言,特點就是快!

我們使用的是開源庫ZXing,ZXing是一個開放源碼的,用Java實現(xiàn)的多種格式的一維二維條碼圖像處理庫,而ZXing.Net是ZXing在.Net平臺下的實現(xiàn)。

首先添加引用,通過Nuget搜索Zxing即可。

img

C#三大特性之一——封裝,因此我們基于原生的庫,封裝了一個Helper類——BarCodeHelper,其中包含三個方法,分別為GenerateBarCode、GenerateQRCode、GenerateQRCodeWithLogo,也就是我們常用的三個功能——生成條形碼、生成二維碼、生成帶Logo的二維碼。

/// <summary>
/// 生成一維條形碼
/// </summary>
/// <param name="text">內(nèi)容</param>
/// <param name="width">寬度</param>
/// <param name="height">高度</param>
/// <returns>Bitmap對象</returns>
public static Bitmap GenerateBarCode(string text, int width, int height)
{
BarcodeWriter writer = new BarcodeWriter();
writer.Format = BarcodeFormat.CODE_39;
EncodingOptions options = new EncodingOptions()
{
Width = width,
Height = height,
Margin = 2
};
writer.Options = options;
Bitmap map = writer.Write(text);
return map;
}

/// <summary>
/// 生成二維碼
/// </summary>
/// <param name="text">內(nèi)容</param>
/// <param name="width">寬度</param>
/// <param name="height">高度</param>
/// <returns>Bitmap對象</returns>
public static Bitmap GenerateQRCode(string text, int width, int height)
{
BarcodeWriter writer = new BarcodeWriter();
writer.Format = BarcodeFormat.QR_CODE;
QrCodeEncodingOptions options = new QrCodeEncodingOptions()
{
DisableECI = true,//設置內(nèi)容編碼
CharacterSet = "UTF-8",?//設置二維碼的寬度和高度
Width = width,
Height = height,
Margin = 1//設置二維碼的邊距,單位不是固定像素
};
writer.Options = options;
Bitmap map = writer.Write(text);
return map;
}

/// <summary>
/// 生成帶Logo的二維碼
/// </summary>
/// <param name="text">內(nèi)容</param>
/// <param name="width">寬度</param>
/// <param name="height">高度</param>
/// <param name="logo">Logo</param>
/// <returns>Bitmap對象</returns>
public static Bitmap GenerateQRCodeWithLogo(string text, int width, int height, Bitmap logo)
{
//構造二維碼寫碼器
MultiFormatWriter writer = new MultiFormatWriter();
Dictionary<EncodeHintType, object> hint = new Dictionary<EncodeHintType, object>();
hint.Add(EncodeHintType.CHARACTER_SET, "UTF-8");
hint.Add(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
//生成二維碼
BitMatrix bm = writer.encode(text, BarcodeFormat.QR_CODE, width, height , hint);
BarcodeWriter barcodeWriter = new BarcodeWriter();
Bitmap map = barcodeWriter.Write(bm);
//獲取二維碼實際尺寸
int[] rectangle = bm.getEnclosingRectangle();
//計算插入圖片的大小和位置
int middleW = Math.Min((int)(rectangle[2] / 3.5), logo.Width);
int middleH = Math.Min((int)(rectangle[3] / 3.5), logo.Height);
int middleL = (map.Width - middleW) / 2;
int middleT = (map.Height - middleH) / 2;
Bitmap bmpimg = new Bitmap(map.Width, map.Height, PixelFormat.Format32bppArgb);
using (Graphics g = Graphics.FromImage(bmpimg))
{
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.DrawImage(map, 0, 0, width, height);
}
//將二維碼插入圖片
Graphics myGraphic = Graphics.FromImage(bmpimg);
//白底
myGraphic.FillRectangle(Brushes.White, middleL, middleT, middleW, middleH);
myGraphic.DrawImage(logo, middleL, middleT, middleW, middleH);
return bmpimg;
}

再設計一個簡單的窗體界面,包含這三個功能,界面如下

最終實現(xiàn)效果如下:


基于ZXing.Net生成一維二維碼的評論 (共 條)

分享到微博請遵守國家法律
桐城市| 丹寨县| 郧西县| 保靖县| 上蔡县| 江源县| 枣庄市| 黄大仙区| 呼和浩特市| 库尔勒市| 五家渠市| 泽州县| 永昌县| 陕西省| 崇文区| 正宁县| 兴和县| 旺苍县| 芜湖县| 云龙县| 屏东县| 崇阳县| 临泉县| 贵南县| 奉贤区| 巴中市| 铅山县| 陆川县| 花莲县| 泾源县| 如东县| 红安县| 天柱县| 鄄城县| 盐亭县| 黑水县| 金昌市| 林西县| 乌拉特后旗| 新竹市| 昌江|