using System;
|
using System.Drawing;
|
using System.Drawing.Imaging;
|
using System.IO;
|
using ZXing;
|
using ZXing.Common;
|
using ZXing.OneD;
|
using ZXing.QrCode;
|
using ZXing.QrCode.Internal;
|
|
namespace Utility.Tools
|
{
|
public class BarcodeHelper
|
{
|
static readonly string prefix = "data:image/png;base64,";
|
public static Bitmap GetCodeBar(string txt, int width, int height, bool hideCode = false)
|
{
|
Code128EncodingOptions options = new Code128EncodingOptions()
|
{
|
Width = width,
|
Height = height,
|
Margin = 0,
|
PureBarcode = hideCode,
|
ForceCodesetB = true,
|
GS1Format = false
|
};
|
|
BarcodeWriter writer = new BarcodeWriter
|
{
|
Format = BarcodeFormat.CODE_128,
|
Options = options,
|
};
|
try
|
{
|
Bitmap map = writer.Write(txt);
|
return map;
|
}
|
catch (Exception e)
|
{
|
var msg = e.Message;
|
return null;
|
}
|
}
|
|
/// <summary>
|
/// 获取一维码的Base64内容【png格式】
|
/// </summary>
|
/// <param name="txt"></param>
|
/// <param name="width"></param>
|
/// <param name="height"></param>
|
/// <param name="hideCode"></param>
|
/// <returns></returns>
|
public static string GetCodeBarBase64(string txt, int width, int height, bool hideCode = false)
|
{
|
Bitmap map = GetCodeBar(txt, width, height, hideCode);
|
if (map == null)
|
{
|
return string.Empty;
|
}
|
MemoryStream stream = new MemoryStream();
|
try
|
{
|
map.Save(stream, ImageFormat.Png);
|
string re = $"{prefix}{Convert.ToBase64String(stream.ToArray())}";
|
return re;
|
}
|
catch (Exception)
|
{
|
return string.Empty;
|
}
|
finally
|
{
|
map.Dispose();
|
stream.Dispose();
|
}
|
}
|
/// <summary>
|
/// 获取二维码QR
|
/// </summary>
|
/// <param name="txt"></param>
|
/// <param name="width"></param>
|
/// <param name="height"></param>
|
/// <returns></returns>
|
public static Bitmap GetQrCode(string txt, int width, int height)
|
{
|
QrCodeEncodingOptions options = new QrCodeEncodingOptions()
|
{
|
DisableECI = true,//设置内容编码
|
CharacterSet = "UTF-8", //设置二维码的宽度和高度
|
Width = width,
|
Height = height,
|
ErrorCorrection = ErrorCorrectionLevel.H,
|
Margin = 0//设置二维码的边距,单位不是固定像素
|
};
|
BarcodeWriter writer = new BarcodeWriter
|
{
|
Format = BarcodeFormat.QR_CODE,
|
Options = options
|
};
|
try
|
{
|
Bitmap map = writer.Write(txt);
|
return map;
|
}
|
catch (Exception)
|
{
|
return null;
|
}
|
}
|
|
/// <summary>
|
/// 获取二维码QR的Base64内容【png格式】
|
/// </summary>
|
/// <param name="txt"></param>
|
/// <param name="width"></param>
|
/// <param name="height"></param>
|
/// <returns></returns>
|
public static string GetQrCodeBase64(string txt, int width, int height)
|
{
|
Bitmap map = GetQrCode(txt, width, height);
|
if (map == null)
|
{
|
return string.Empty;
|
}
|
MemoryStream stream = new MemoryStream();
|
try
|
{
|
map.Save(stream, ImageFormat.Png);
|
string re = $"{prefix}{Convert.ToBase64String(stream.ToArray())}";
|
return re;
|
}
|
catch (Exception)
|
{
|
return string.Empty;
|
}
|
finally
|
{
|
map.Dispose();
|
stream.Dispose();
|
}
|
}
|
|
/// <summary>
|
/// 获取识别一维码或二维码的结果
|
/// </summary>
|
/// <param name="base64"></param>
|
/// <returns></returns>
|
public static string GetDecode(string base64)
|
{
|
string re = string.Empty;
|
var bts = Convert.FromBase64String(base64);
|
MemoryStream stream = new MemoryStream(bts);
|
var map = (Bitmap)Image.FromStream(stream);
|
//
|
var reader = new BarcodeReader();
|
try
|
{
|
var result = reader.Decode(map);
|
if (result != null)
|
{
|
re = $"{result.BarcodeFormat}:{result.Text}";
|
}
|
return re;
|
}
|
catch (Exception)
|
{
|
return re;
|
}
|
finally
|
{
|
stream.Dispose();
|
map.Dispose();
|
}
|
}
|
}
|
}
|