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;
}
}
}

原文地址:https://www.cnblogs.com/limitpjz/p/5489562.html