• C#二维码与条形码的生成


    二维码

    using Gma.QrCodeNet.Encoding;
    using Gma.QrCodeNet.Encoding.Windows.Render;

    string str = "Http://www.baidu.com";
    QrEncoder encoder = new Gma.QrCodeNet.Encoding.QrEncoder();
    QrCode code;
    encoder.TryEncode(str, out code);
    //生成图片
    GraphicsRenderer renderer = new GraphicsRenderer(new FixedModuleSize(5, QuietZoneModules.Zero), new SolidBrush(Color.Black), new SolidBrush(Color.White));
    //将生成的图片写入输出流中
    renderer.WriteToStream(code.Matrix, ImageFormat.Jpeg, context.Response.OutputStream);

    -----------------------------------------------------------------------------------------------------------

    条形码

    namespace Barcode
    {
    using System.Collections;
    using System.Drawing;

    public class CodeUtility
    {
    #region Public Methods and Operators

    /// <summary>
    /// 获取 39 码(HTML 版)
    /// </summary>
    /// <param name="s">欲编码的字符串</param>
    /// <param name="width">单个条形宽(px)</param>
    /// <param name="height">条形高(px)</param>
    /// <returns></returns>
    public static string GetCode(string s, int width, int height)
    {
    var ht = new Hashtable();

    #region 39码 12位

    ht.Add('A', "110101001011");
    ht.Add('B', "101101001011");
    ht.Add('C', "110110100101");
    ht.Add('D', "101011001011");
    ht.Add('E', "110101100101");
    ht.Add('F', "101101100101");
    ht.Add('G', "101010011011");
    ht.Add('H', "110101001101");
    ht.Add('I', "101101001101");
    ht.Add('J', "101011001101");
    ht.Add('K', "110101010011");
    ht.Add('L', "101101010011");
    ht.Add('M', "110110101001");
    ht.Add('N', "101011010011");
    ht.Add('O', "110101101001");
    ht.Add('P', "101101101001");
    ht.Add('Q', "101010110011");
    ht.Add('R', "110101011001");
    ht.Add('S', "101101011001");
    ht.Add('T', "101011011001");
    ht.Add('U', "110010101011");
    ht.Add('V', "100110101011");
    ht.Add('W', "110011010101");
    ht.Add('X', "100101101011");
    ht.Add('Y', "110010110101");
    ht.Add('Z', "100110110101");
    ht.Add('0', "101001101101");
    ht.Add('1', "110100101011");
    ht.Add('2', "101100101011");
    ht.Add('3', "110110010101");
    ht.Add('4', "101001101011");
    ht.Add('5', "110100110101");
    ht.Add('6', "101100110101");
    ht.Add('7', "101001011011");
    ht.Add('8', "110100101101");
    ht.Add('9', "101100101101");
    ht.Add('+', "100101001001");
    ht.Add('-', "100101011011");
    ht.Add('*', "100101101101");
    ht.Add('/', "100100101001");
    ht.Add('%', "101001001001");
    ht.Add('$', "100100100101");
    ht.Add('.', "110010101101");
    ht.Add(' ', "100110101101");

    #endregion

    #region 39码 9位

    //ht.Add('0', "000110100");
    //ht.Add('1', "100100001");
    //ht.Add('2', "001100001");
    //ht.Add('3', "101100000");
    //ht.Add('4', "000110001");
    //ht.Add('5', "100110000");
    //ht.Add('6', "001110000");
    //ht.Add('7', "000100101");
    //ht.Add('8', "100100100");
    //ht.Add('9', "001100100");
    //ht.Add('A', "100001001");
    //ht.Add('B', "001001001");
    //ht.Add('C', "101001000");
    //ht.Add('D', "000011001");
    //ht.Add('E', "100011000");
    //ht.Add('F', "001011000");
    //ht.Add('G', "000001101");
    //ht.Add('H', "100001100");
    //ht.Add('I', "001001100");
    //ht.Add('J', "000011100");
    //ht.Add('K', "100000011");
    //ht.Add('L', "001000011");
    //ht.Add('M', "101000010");
    //ht.Add('N', "000010011");
    //ht.Add('O', "100010010");
    //ht.Add('P', "001010010");
    //ht.Add('Q', "000000111");
    //ht.Add('R', "100000110");
    //ht.Add('S', "001000110");
    //ht.Add('T', "000010110");
    //ht.Add('U', "110000001");
    //ht.Add('V', "011000001");
    //ht.Add('W', "111000000");
    //ht.Add('X', "010010001");
    //ht.Add('Y', "110010000");
    //ht.Add('Z', "011010000");
    //ht.Add('-', "010000101");
    //ht.Add('.', "110000100");
    //ht.Add(' ', "011000100");
    //ht.Add('*', "010010100");
    //ht.Add('$', "010101000");
    //ht.Add('/', "010100010");
    //ht.Add('+', "010001010");
    //ht.Add('%', "000101010");

    #endregion

    s = "*" + s.ToUpper() + "*";

    string result_bin = ""; // 二进制串
    string split = "0"; // 间隔,与一个单位的线条宽度相等

    try
    {
    foreach (char ch in s)
    {
    result_bin += ht[ch].ToString();
    result_bin += split;
    }
    }
    catch
    {
    return "存在不允许的字符!";
    }

    string result_html = ""; // HTML代码
    string color = ""; // 颜色
    foreach (char c in result_bin)
    {
    color = c == '0' ? "#FFFFFF" : "#000000";
    result_html += "<div style="" + width + "px;height:" + height + "px;float:left;background:"
    + color + ";"></div>";
    }
    result_html += "<div style="clear:both"></div>";

    int len = ht['*'].ToString().Length;
    foreach (char c in s)
    {
    result_html += "<div style="" + (width * (len + split.Length))
    + "px;float:left;color:#000000;text-align:center;">" + c + "</div>";
    }
    result_html += "<div style="clear:both"></div>";

    return "<div style="background:#FFFFFF;padding:5px;font-size:" + (width * 10) + "px;font-family:'楷体';">"
    + result_html + "</div>";
    }

    #endregion

    public static Bitmap GetCode39(string sourceCode)
    {
    int leftMargin = 5;
    int topMargin = 0;
    int thickLength = 2;
    int narrowLength = 1;
    int barCodeHeight = 35;
    int intSourceLength = sourceCode.Length;
    string strEncode = "010010100"; //添加起始码“*”.
    var font = new System.Drawing.Font("Segoe UI", 5);

    string AlphaBet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%*";

    string[] Code39 =
    {
    /* 0 */ "000110100", /* 1 */ "100100001", /* 2 */ "001100001", /* 3 */ "101100000",
    /* 4 */ "000110001", /* 5 */ "100110000", /* 6 */ "001110000", /* 7 */
    "000100101", /* 8 */ "100100100", /* 9 */ "001100100", /* A */ "100001001",
    /* B */ "001001001", /* C */ "101001000", /* D */ "000011001", /* E */
    "100011000", /* F */ "001011000", /* G */ "000001101", /* H */ "100001100",
    /* I */ "001001100", /* J */ "000011100", /* K */ "100000011", /* L */
    "001000011", /* M */ "101000010", /* N */ "000010011", /* O */ "100010010",
    /* P */ "001010010", /* Q */ "000000111", /* R */ "100000110", /* S */
    "001000110", /* T */ "000010110", /* U */ "110000001", /* V */ "011000001",
    /* W */ "111000000", /* X */ "010010001", /* Y */ "110010000", /* Z */
    "011010000", /* - */ "010000101", /* . */ "110000100", /*' '*/ "011000100",
    /* $ */ "010101000", /* / */ "010100010", /* + */ "010001010", /* % */
    "000101010", /* * */ "010010100"
    };
    sourceCode = sourceCode.ToUpper();

    Bitmap objBitmap =
    new Bitmap(
    ((thickLength * 3 + narrowLength * 7) * (intSourceLength + 2)) + (leftMargin * 2),
    barCodeHeight + (topMargin * 2));
    Graphics objGraphics = Graphics.FromImage(objBitmap);

    objGraphics.FillRectangle(Brushes.White, 0, 0, objBitmap.Width, objBitmap.Height);

    for (int i = 0; i < intSourceLength; i++)
    {
    //非法字符校验
    if (AlphaBet.IndexOf(sourceCode[i]) == -1 || sourceCode[i] == '*')
    {
    objGraphics.DrawString(
    "Invalid Bar Code",
    SystemFonts.DefaultFont,
    Brushes.Red,
    leftMargin,
    topMargin);
    return objBitmap;
    }
    //编码
    strEncode = string.Format("{0}0{1}", strEncode, Code39[AlphaBet.IndexOf(sourceCode[i])]);
    }

    strEncode = string.Format("{0}0010010100", strEncode); //添加结束码“*”

    int intEncodeLength = strEncode.Length;
    int intBarWidth;

    for (int i = 0; i < intEncodeLength; i++) //绘制 Code39 barcode
    {
    intBarWidth = strEncode[i] == '1' ? thickLength : narrowLength;
    objGraphics.FillRectangle(
    i % 2 == 0 ? Brushes.Black : Brushes.White,
    leftMargin,
    topMargin,
    intBarWidth,
    barCodeHeight);
    leftMargin += intBarWidth;
    }

    //绘制 明码
    SizeF sizeF = objGraphics.MeasureString(sourceCode, font);
    float x = (objBitmap.Width - sizeF.Width) / 2;
    float y = objBitmap.Height - sizeF.Height;
    objGraphics.FillRectangle(Brushes.White, x, y, sizeF.Width, sizeF.Height);
    objGraphics.DrawString(sourceCode, font, Brushes.Black, x, y);

    return objBitmap;
    }
    }
    }

  • 相关阅读:
    Unity-WIKI 之 AllocationStats(内存分配)
    Unity-WIKI 之 DebugLine
    Unity-WIKI 之 DebugConsole
    Unity-WIKI 之 DrawArrow
    Unity 2D Sprite Lighting
    Unity 2D Touch Movement
    [Unity2D]2D Mobile Joystick
    DragRigidbody2D
    Finger Gestures 3.1
    2D Skeletal Animation Ready
  • 原文地址:https://www.cnblogs.com/limitpjz/p/5489562.html
Copyright © 2020-2023  润新知