1. 程式人生 > >C# 製作 二維碼/條形碼

C# 製作 二維碼/條形碼

方法一: 使用zxing.dll製作二維碼和條形碼,下載zxing.dll 檔案後,專案 -- 引用  右鍵新增
C#Code   ZXing.cs檔案

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.IO;
using System.Drawing.Imaging;

using com.google.zxing.qrcode;
using com.google.zxing;
using com.google.zxing.common;
using ByteMatrix = com.google.zxing.common.ByteMatrix;
using EAN13Writer = com.google.zxing.oned.EAN13Writer;
using EAN8Writer = com.google.zxing.oned.EAN8Writer;
using MultiFormatWriter = com.google.zxing.MultiFormatWriter;

namespace MakeBarCode
{
    public class ZXing
    {
        
        #region 生成二維碼
        /// <summary>
        ///  生成二維碼
        /// </summary>
        /// <param name="data">新增需要生成二維碼的字元資訊</param>
        /// <returns></returns>
        public static Bitmap CreateTwoBarCode(string data)
        {
            ByteMatrix byteMatrix = new MultiFormatWriter().encode(data, BarcodeFormat.QR_CODE, 200, 200);

            return toBitmap(byteMatrix);
        }

        public static void SaveToFile(ByteMatrix matrix, System.Drawing.Imaging.ImageFormat format, string file)
        {
            Bitmap bmap = toBitmap(matrix);


            Bitmap b = new Bitmap(bmap.Width, bmap.Height);

            Bitmap logo = null;

            logo = new Bitmap("1.bmp");

            Graphics g = Graphics.FromImage(b);

            g.DrawImage(bmap, 0, 0);
 
            g.DrawImage(logo,10,10);


            b.Save("BarCodeImage11.jpg");

            if (logo == null)
            {
                MessageBox.Show("1111");
            }

            bmap.Save(file, format);
        }
        public static Bitmap toBitmap(ByteMatrix matrix)
        {
            int width = matrix.Width;
            int height = matrix.Height;
            Bitmap bmap = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            for (int x = 0; x < width; x++)
            {
                for (int y = 0; y < height; y++)
                {
                    bmap.SetPixel(x, y, matrix.get_Renamed(x, y) != -1 ? ColorTranslator.FromHtml("0xFF000000") : ColorTranslator.FromHtml("0xFFFFFFFF"));
                }
            }
            return bmap;
        }
        #endregion 

        #region 生成條形碼

        /// <summary>
        ///  生成條形碼
        /// </summary>
        /// <param name="text">數字</param>
        /// <param name="w">條碼寬度,建議使用 150</param>
        /// <param name="h">條碼高度,建議使用 100</param>
        /// <returns></returns>
        public static Bitmap CreateOneBarCode(string text)
        {// 只能是8個數字字串
            MultiFormatWriter mutiWriter = new com.google.zxing.MultiFormatWriter();
            ByteMatrix bm = mutiWriter.encode(text, com.google.zxing.BarcodeFormat.EAN_8, 150, 100);
            return bm.ToBitmap();
        }

        #endregion 


        #region 條形碼 , 二維碼解碼
        /// <summary>
        /// 條形碼 , 二維碼解碼
        /// </summary>
        /// <param name="img"></param>
        /// <returns></returns>
        public static string Decoder(Image img)
        {
            Bitmap bmap;
            try
            {
                bmap = new Bitmap(img);
            }
            catch (System.IO.IOException ioe)
            {
                MessageBox.Show(ioe.ToString());
                return "";
            }
            if (bmap == null)
            {
                MessageBox.Show("Could not decode image");
                return "";
            }
          
            LuminanceSource source = new RGBLuminanceSource(bmap, bmap.Width, bmap.Height);
            
            com.google.zxing.BinaryBitmap bitmap = new com.google.zxing.BinaryBitmap(new com.google.zxing.common.HybridBinarizer(source));
          
            Result result;
            try
            {
                 result = new MultiFormatReader().decode(bitmap);
            }
            catch (ReaderException re)
            {
                //MessageBox.Show("不是有效二維碼圖片");

                // 使用解條形碼的方法
                MultiFormatReader mutiReader = new MultiFormatReader();
                LuminanceSource ls = new RGBLuminanceSource(bmap, bmap.Width, bmap.Height);
                BinaryBitmap bb = new BinaryBitmap(new com.google.zxing.common.HybridBinarizer(ls));
                Result r = mutiReader.decode(bb);
                return r.Text;
                
            }

            return result.Text;
        }  

        #endregion 


        #region 二維碼新增logo
        /// <summary>
        /// 二維碼新增logo
        /// </summary>
        /// <param name="sourceMap">二維碼圖</param>
        /// <param name="logoFilePath">logo圖片路徑, logo不宜過大,建議 20x20 以內大小</param>
        /// <returns></returns>
        public static Bitmap AddLogo(Bitmap sourceMap,string logoFilePath)
        {
            Graphics gra = Graphics.FromImage(sourceMap);

            Image logo = Image.FromFile(logoFilePath);

            if(logo.Width > 20 || logo.Height >20)
            {
                MessageBox.Show("新增失敗:建議logo圖片的大小為 20x20 以內");
                return sourceMap;
            }

            gra.DrawImage(logo, (sourceMap.Width - logo.Width) / 2, (sourceMap.Height - logo.Height) / 2);
          
            return sourceMap;
        }


        #endregion 


    }
}

方法二: 使用ThoughtWorks.QRCode.dll製作條形碼, 下載ThoughtWorks.QRCode.dll 檔案後,專案 -- 引用  右鍵新增
C#Code  BarCode.cs檔案

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms;

using ThoughtWorks.QRCode;
using ThoughtWorks.QRCode.Codec;
using ThoughtWorks.QRCode.Codec.Data;
using ThoughtWorks.QRCode.Codec.Util;

namespace MakeScanCode
{
    /// <summary>
    /// 生成條形碼( 128條碼,標準參考:GB/T 18347-2001 )

    /// BY JUNSON 20090508
    /// </summary>

    public class BarCode
    {
        /// <summary>
        /// 條形碼生成函式
        /// </summary>
        /// <param name="text">條型碼字串</param>
        /// <returns></returns>
        public static Bitmap CreateOneBarCode(string text)
        {
            //查檢是否合條件TEXT
            bool ck = CheckErrerCode(text);
            if (!ck)
            {
               MessageBox.Show("條形碼字元不合要求,不能是存在漢字或全形字元");
               return null;
            }
            string barstring = BuildBarString(text);
            return KiCode128C(barstring, 30);

        }

        /// <summary>
        /// 建立條碼字串
        /// </summary>
        /// <param name="tex">條碼內容</param>
        /// <returns></returns>
        private static string BuildBarString(string tex)
        {
            string barstart = "bbsbssbssss";    //碼頭
            string barbody = "";                //碼身
            string barcheck = "";               //碼檢
            string barend = "bbsssbbbsbsbb";    //碼尾

            int checkNum = 104;
            //迴圈新增碼身,計算碼檢
            for (int i = 1; i <= tex.Length; i++)
            {
                int index = (int)tex[i - 1] - 32;
                checkNum += (index * i);

                barbody += AddSimpleTag(index);//加入字元值的條碼標記
            }
            //碼檢值計算

            barcheck = AddSimpleTag(int.Parse(Convert.ToDouble(checkNum % 103).ToString("0")));


            string barstring = barstart + barbody + barcheck + barend;
            return barstring;
        }

        //增加一個條碼標記
        private static string AddSimpleTag(int CodeIndex)
        {
            string res = "";

            /// <summary>1-4的條的字元標識 </summary>
            string[] TagB = { "", "b", "bb", "bbb", "bbbb" };
            /// <summary>1-4的空的字元標識 </summary>
            string[] TagS = { "", "s", "ss", "sss", "ssss" };
            string[] Code128List = new string[] {
                "212222","222122","222221","121223","121322","131222","122213","122312","132212","221213",
                "221312","231212","112232","122132","122231","113222","123122","123221","223211","221132",
                "221231","213212","223112","312131","311222","321122","321221","312212","322112","322211",
                "212123","212321","232121","111323","131123","131321","112313","132113","132311","211313",
                "231113","231311","112133","112331","132131","113123","113321","133121","313121","211331",
                "231131","213113","213311","213131","311123","311321","331121","312113","312311","332111",
                "314111","221411","431111","111224","111422","121124","121421","141122","141221","112214",
                "112412","122114","122411","142112","142211","241211","221114","413111","241112","134111",
                "111242","121142","121241","114212","124112","124211","411212","421112","421211","212141",
                "214121","412121","111143","111341","131141","114113","114311","411113","411311","113141",
                "114131","311141","411131","211412","211214","211232" };

            string tag = Code128List[CodeIndex];

            for (int i = 0; i < tag.Length; i++)
            {
                string temp = "";
                int num = int.Parse(tag[i].ToString());
                if (i % 2 == 0)
                {
                    temp = TagB[num];
                }
                else
                {
                    temp = TagS[num];
                }
                res += temp;
            }
            return res;
        }

        /// <summary>
        /// 檢查條形碼文字是否合條件(不能是漢字或全形字元)
        /// </summary>
        /// <param name="cktext"></param>
        /// <returns></returns>
        private static bool CheckErrerCode(string cktext)
        {
            foreach (char c in cktext)
            {
                byte[] tmp = System.Text.UnicodeEncoding.Default.GetBytes(c.ToString());

                if (tmp.Length > 1)
                    return false;
            }
            return true;
        }
        
        /// <summary>生成條碼 </summary>
        /// <param name="BarString">條碼模式字串</param>  //Format32bppArgb
        /// <param name="Height">生成的條碼高度</param>
        /// <returns>條碼圖形</returns>
        private static Bitmap KiCode128C(string BarString, int _Height)
        {

            Bitmap b = new Bitmap(BarString.Length, _Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            //using (Graphics grp = Graphics.FromImage(b))
            //{
            try
            {
                char[] cs = BarString.ToCharArray();


                for (int i = 0; i < cs.Length; i++)
                {
                    for (int j = 0; j < _Height; j++)
                    {
                        if (cs[i] == 'b')
                        {
                            b.SetPixel(i, j,System.Drawing.Color.Black);
                        }
                        else
                        {
                            b.SetPixel(i, j,System.Drawing.Color.White);
                        }
                    }
                }

                //grp.DrawString(text, SystemFonts.CaptionFont, Brushes.Black, new PointF(leftEmpty, b.Height - botEmpty));

                return b;
            }
            catch
            {
                return null;
            }
            //}
        }

    }
}

總結:


相關推薦

C# 製作 /條形碼

方法一: 使用zxing.dll製作二維碼和條形碼,下載zxing.dll 檔案後,專案 -- 引用  右鍵新增 C#Code   ZXing.cs檔案 using System; using System.Collections.Generic; using Syste

Excel製作條形碼?你肯定沒見過

如題,今天教大家用Excel製作二維碼、條形碼,相信很多人疑問,怎麼做到?其實很簡單,一起來學習一下吧。 二維碼效果圖:   具體操作步驟: 1. 開啟Excel表格——【開發工具】——【插入】——【其他控制元件】,在其他控制元件中選擇【Microsoft Bar

Python製作條形碼掃描器 (pyzbar)

條碼在生活中隨處可見,其可分為三類:一維條碼、二維條碼、三維條碼 一維條碼:        我們平時習慣稱為條形碼。條形碼是將寬度不等的多個黑條和空白,按照一定的編碼規則排列,用以表達一組資訊的圖形識別符號。常見的條形碼是由反射率相差很大的黑條(簡稱條)和白條(簡稱

c#生成,一(條形碼)

傳統 lin family 底部 之一 提供商 tex 圖像 字節 一、一維碼 1.一維條碼即指條碼條和空的排列規則,常用的一維碼的碼制包括:EAN碼、39碼、交叉25碼、UPC碼、128碼、93碼,ISBN碼,及Codabar(庫德巴碼)等。 2.一維

ASP.NET中C#生成

保存 mss 軟件 clear 所有 str drawing for visual ASP.NET中用C#語言編寫網頁,將自己輸入的文字生成二維碼。 工具/原料 已安裝好VS2010或其他版本VS軟件的電腦一臺 1、新建 1

C#生成

-1 odi null erro img turn bitmap codec encode http://www.cnblogs.com/jys509/p/4592539.html C# 中使用 ThoughtWorks.QRCode.dll 生成指定尺寸和邊框寬度的二維碼

c++生成

int ostream names 好的 iyu gif free namespace tail vs2010編譯好的qrencode庫:http://files.cnblogs.com/files/verstin/qrencode.rar 版本是3.4.4 編譯方法參

C#生成,裁切邊框

google tasks html fff white zxing ace sta wim 使用google zxing生成的二維碼帶有白色邊框,顯示在報告(使用Crystal Report 水晶報表)上時,由於空間有限造成二維碼過小難以掃描識別。 通過將白色邊框裁切掉,

C# QRDEMO

decode cor tree ref C# 編碼 work TP 第三方類 C# QR二維碼DEMO QR二維碼 二維碼的一種 相關技術 ThoughtWorks.QRCode 第三方類庫 DEMO功能 Encode 生成二維碼圖片 Encoding 編碼 Corr

如何用 Excel 製作

一、在A1單元格輸入你需要製作的內容(如一個網址),點選開發工具—>插入----->其他控制元件 二、下拉找到Microsoft BarCode Control 16.0 選項---->點選確定---->然後在空白區域拉動滑鼠箭頭---

使用PHP製作

<?php /** Created by PhpStorm. User: 張海強 Date: 2018/11/9 Time: 20:34 */ //引入核心庫檔案 include "phpqrcode/phpqrcode.php"; //定義糾錯級別 $errorLevel

Android 基於google Zxing實現 條形碼掃描,仿微信掃描效果

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

超簡單ZXing掃描條形碼

首先在build.gradle寫上方法 repositories { mavenCentral() maven { url "http://dl.bintray.com/journeyapps/maven" } } 然後還是在這個檔案內加上依賴 implemen

iOS 掃描/條形碼

級別:★★☆☆☆ 標籤:「iOS 原生掃描」「AVCaptureSession」「AVCaptureDevice」「rectOfInterest」 作者: Xs·H 審校: QiShare團隊 最近做IoT專案,在智慧裝置配網過程中有一個掃描裝置或說明書上的二維碼/條形碼來讀取裝置資

java用谷歌的zxing包製作

1.pom.xml匯入zxing依賴 <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId>

STM32F103 + LCD屏製作

2、解壓後得到,如下檔案 3、檔案很多,只需要提取庫檔案就可以了,下圖三個檔案 4、新增到工程上編輯後會報錯 如下 需要在qr_encode.h中新增標頭檔案,如下圖 再次編譯--通過 5、建立兩個處理二維碼顯示的檔案QRcode_main.c

Android Zxing實現掃描條形碼功能仿微信整合閃光燈生成

最近在做android專案需要用到二維碼條形碼掃描功能,我用的是Eclipse網上原始碼大多是GitHup上的Android studio版本的所以我改了一版整合到專案中去。 效果圖: 左邊版本的掃碼框是自定義的。右邊版本的掃碼框和掃描線是圖片因為太醜所以最終換成左邊

如何製作並新增到PDF檔案中

在我們日常生活中,二維碼彷彿無處不在,關注公眾號掃一掃、新增好友掃一掃、上街購物掃一掃,既然二維碼的應用如此的廣泛,你知道二維碼是如何製作的嗎?今天,小編不光給你介紹二維碼製作的方法,還順便告訴你如何把它新增到PDF檔案中去。怎麼樣,是不是超想學會呢?想學那就繼

iOS 生成/條形碼

級別:★★☆☆☆ 標籤:「iOS CIFilter」「CIQRCodeGenerator」「CICode128BarcodeGenerator」「二維碼加logo」 作者: Xs·H 審校: QiShare團隊 接上文iOS 掃描二維碼/條形碼 及 iOS 掃描相簿圖片二維碼,本文介

關於製作和掃一掃功能的實現

package com.example.project; import android.Manifest; import android.content.Context; import android.content.Intent; import android.content.pm.P