注:使用此工具類時需要引入zxing.dll工具。
using System;
using System.Collections.Generic;using System.Linq;
using System.Text;
using ZXing.Common;
using ZXing;
using ZXing.QrCode;
using System.Collections;
using ZXing.QrCode.Internal;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
namespace www.xinduofen.com
{
/// <summary>
/// 二維碼和條形碼的生成與解析
/// </summary>
class MyZxingTool
{
/// <summary>
/// 生成二維碼並保存到內存中(UTF-8編碼)
/// </summary>
/// <param name="contents">二維碼字符串內容</param>
/// <param name="width">二維碼寬度</param>
/// <param name="height">二維碼高度</param>
/// <returns>返回爲null代表生成失敗</returns>
public static Bitmap encodeQRCode(String contents, int width, int height)
{
Bitmap bitmap = null;
try {
EncodingOptions options = new QrCodeEncodingOptions
{
DisableECI = true,
CharacterSet = "UTF-8",// 指定編碼格式
ErrorCorrection = ErrorCorrectionLevel.M,// 指定糾錯等級
Width = width,
Height = height
};
BarcodeWriter writer = new BarcodeWriter();
writer.Options = options;
writer.Format = BarcodeFormat.QR_CODE;//二維碼
bitmap = writer.Write(contents);//二維碼生成成功
}catch(Exception e){
System.Console.WriteLine(e.Message);
}
return bitmap;
}
/// <summary>
/// 解析二維碼
/// </summary>
/// <param name="imgPath">二維碼圖片保存路徑</param>
/// <returns>返回爲null代表解析失敗</returns>
public static String decodeQRCode(String imgPath) {
String resultStr = null;
try {
BarcodeReader reader = new BarcodeReader();
reader.AutoRotate = true;
//reader.Options.CharacterSet = "UTF-8";
Result result = reader.Decode(new Bitmap(Image.FromFile(imgPath)));
resultStr = result.Text;
} catch (Exception e) {
System.Console.WriteLine(e.Message);
}
return resultStr;
}
/// <summary>
/// 解析二維碼
/// </summary>
/// <param name="bitmap">二維碼緩存圖片</param>
/// <returns>返回爲null代表解析失敗</returns>
public static String decodeQRCode(Bitmap bitmap)
{
String resultStr = null;
try
{
BarcodeReader reader = new BarcodeReader();
reader.AutoRotate = true;
//reader.Options.CharacterSet = "UTF-8";
Result result = reader.Decode(bitmap);
resultStr = result.Text;
}
catch (Exception e)
{
System.Console.WriteLine(e.Message);
}
return resultStr;
}
/// <summary>
/// 生成條形碼並保存到內存中(code128編碼)
/// </summary>
/// <param name="contents">條形碼字符串內容</param>
/// <param name="width">條形碼寬度</param>
/// <param name="height">條形碼高度</param>
/// <returns>返回爲null代表生成失敗</returns>
public static Bitmap encodeBarCode(String contents, int width, int height)
{
Bitmap bitmap = null;
try
{
EncodingOptions options = new QrCodeEncodingOptions
{
Width = width,
Height = height
};
BarcodeWriter writer = new BarcodeWriter();
writer.Options = options;
writer.Format = BarcodeFormat.CODE_128;//條形碼
bitmap = writer.Write(contents);//條形碼生成成功
}
catch (Exception e)
{
System.Console.WriteLine(e.Message);
}
return bitmap;
}
/// <summary>
/// 解析條形碼(支持多種編碼格式)
/// </summary>
/// <param name="imgPath">條形碼圖片保存路徑</param>
/// <returns>返回爲null代表解析失敗</returns>
public static String decodeBarCode(String imgPath) {
String resultStr = null;
try
{
BarcodeReader reader = new BarcodeReader();
reader.AutoRotate = true;
Result result = reader.Decode(new Bitmap(Image.FromFile(imgPath)));
resultStr = result.Text;
}
catch (Exception e)
{
System.Console.WriteLine(e.Message);
}
return resultStr;
}
/// <summary>
/// 解析條形碼(支持多種編碼格式)
/// </summary>
/// <param name="bitmap">條形碼緩存圖片</param>
/// <returns>返回爲null代表解析失敗</returns>
public static String decodeBarCode(Bitmap bitmap)
{
String resultStr = null;
try
{
BarcodeReader reader = new BarcodeReader();
reader.AutoRotate = true;
Result result = reader.Decode(bitmap);
resultStr = result.Text;
}
catch (Exception e)
{
System.Console.WriteLine(e.Message);
}
return resultStr;
}
/// <summary>
/// 保存緩存圖片到指定的文件位置
/// </summary>
/// <param name="bitmap">緩存圖片</param>
/// <param name="imageFilePath">指定的文件位置</param>
/// <param name="imageFormat">用於保存圖片的格式,比如:ImageFormat.Jpeg、ImageFormat.Png</param>
/// <returns>返回爲true代表保存成功</returns>
public static Boolean saveImageToFile(Bitmap bitmap, String imageFilePath, ImageFormat imageFormat)
{
Boolean result = false;//初始化爲"保存失敗"
try
{
bitmap.Save(imageFilePath, imageFormat);
result = true;//二維碼生成成功
}catch(Exception e){
System.Console.WriteLine(e.Message);
}
return result;
}
/// <summary>
/// 將Bitmap對象轉換成對應格式imageFormat的圖片,再將得到的圖片數據流轉換成Base64字符串
/// </summary>
/// <param name="bitmap">Bitmap對象</param>
/// <param name="imageFormat">用於保存圖片的格式,比如:ImageFormat.Jpeg、ImageFormat.Png</param>
/// <returns>返回爲null代表轉換失敗</returns>
public static String getBase64StringFromImage(Bitmap bitmap, ImageFormat imageFormat)
{
String base64String = null;
MemoryStream outCache = null;
try
{
outCache = new MemoryStream();
bitmap.Save(outCache, imageFormat);
byte[] data = outCache.ToArray();
base64String = System.Convert.ToBase64String(data, 0, data.Length);
}
catch (Exception e)
{
System.Console.WriteLine(e.Message);
}
finally {
if (outCache!=null)
{
outCache.Close();
outCache = null;
}
}
return base64String;
}
}
}