C#的zxing條碼工具

注:使用此工具類時需要引入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;
        }
    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章