二维码

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:" + 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:" + (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;
}
}
}

C#二维码与条形码的生成的更多相关文章

  1. 【Demo】 生成二维码 和 条形码

    条形码 和 二维码 对比 一维条形码只是在一个方向(一般是水平方向)表达信息,而在垂直方向则不表达任何信息,其一定的高度通常是为了便于阅读器的对准. 在水平和垂直方向的二维空间存储信息的条形码, 称为 ...

  2. Android二维码开源项目zxing用例简化和生成二维码、条形码

    上一篇讲到:Android二维码开源项目zxing编译,编译出来后有一个自带的測试程序:CaptureActivity比較复杂,我仅仅要是把一些不用的东西去掉,用看起来更方便,二维码和条形码的流行性自 ...

  3. iOS - 原生的CIFilter生成二维码和条形码

    使用CIFilter可以不引入任何第三方库,就可以生成想要的二维码和条形码,今天简单的介绍一下使用CIFilter生成二维码和条形码.系统CIFilter生成的二维码和条形码的大小有时并不能满足需求, ...

  4. iOS8 生成二维码与条形码

    iOS8 生成二维码与条形码 效果图: 源码: // // ViewController.m // CodeCreator // // Created by YouXianMing on 15/3/1 ...

  5. iOS二维码、条形码生成(可指定大小、颜色)

    一.前言: iOS7.0之后可以利用系统原生 API 生成二维码, iOS8.0之后可以生成条形码, 系统默认生成的颜色是黑色. 在这里, 利用以下方法可以生成指定大小.指定颜色的二维码和条形码, 还 ...

  6. 二维码、条形码扫描——使用Google ZXing

    我在项目中用到了二维码扫描的技术,用的是Google提供的ZXing开源项目,它提供二维码和条形码的扫描.扫描条形码就是直接读取条形码的内容,扫描二维码是按照自己指定的二维码格式进行编码和解码. 可以 ...

  7. Android ZXing 二维码、条形码扫描介绍

    本帖最后由 Shims 于 2013-11-9 12:39 编辑 最近公司的Android项目需要用到摄像头做条码或二维码的扫描,Google一下,发现一个开源的 ZXing项目.它提供二维码和条形码 ...

  8. android 项目学习随笔二十一(IM、语音识别、机器人、统计、扫描二维码、条形码)

    语音识别:科大讯飞语音云 http://www.xfyun.cn/ 语音机器人模拟 public class TalkBean { public String text; public boolean ...

  9. Android高级控件(三)—— 使用Google ZXing实现二维码的扫描和生成相关功能体系

    Android高级控件(三)-- 使用Google ZXing实现二维码的扫描和生成相关功能体系 摘要 现在的二维码可谓是烂大街了,到处都是二维码,什么都是二维码,扫一扫似乎已经流行到习以为常了,今天 ...

随机推荐

  1. Java集合框架详解(全)

    一.Java集合框架概述 集合可以看作是一种容器,用来存储对象信息.所有集合类都位于java.util包下,但支持多线程的集合类位于java.util.concurrent包下. 数组与集合的区别如下 ...

  2. Java核心技术第四章——3.对象构造

    重载: 如果多个方法(包含构造方法)有相同的名字.不同的参数,便产生重载.编译器必须挑选出具体执行哪个方法,它通过用各个方法给出的参数类型与特定方法调用所使用的值类型进行匹配挑选出相对应的方法. 如果 ...

  3. .NetCore WebApi——Swagger简单配置

    在前后端分离的大环境下,API接口文档成为了前后端交流的一个重点.Swagger让开发人员摆脱了写接口文档的痛苦. 官方网址:https://swagger.io/ 在.Net Core WebApi ...

  4. tcp/ip协议详解

    1. 概念介绍 互联网协议(Internet Protocol Suite)是一个网络通信模型,以及一整个网络传输协议家族,为互联网的基础通信架构.它常被通称为 TCP/IP 协议族(英语:TCP/I ...

  5. 认识音频格式-Au (NeXT/Sun)

    音频格式比较多, Au音频格式是一种被sun微处理器公司发明的一种简单的音频编码格式.日后一直在NEXT系统上使用,后面就演变成了一种标准的音频编码格式.目前很多音频设备上都支持这种编码格式.这种编码 ...

  6. 【TensorFlow篇】--Tensorflow框架初始,实现机器学习中多元线性回归

    一.前述 TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,T ...

  7. WebApi生成在线API文档--Swagger

    1.前言 1.1 SwaggerUI SwaggerUI 是一个简单的Restful API 测试和文档工具.简单.漂亮.易用(官方demo).通过读取JSON 配置显示API. 项目本身仅仅也只依赖 ...

  8. 在Linux(Centos7)上使用Docker运行.NetCore

    在上一篇中我们写了如何在windows中使用docker运行.netcore,既然我们了解了windows下的运行发布,我们也可以试试linux下使用docker运行.netcore项目,那么今天我们 ...

  9. 【Android Studio安装部署系列】四、Android SDK目录和作用分析

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android SDk Tool软件开发工具包(software development kit).被软件开发工程师用于为特定的软件 ...

  10. 【activity任务栈】浅析

    背景知识 Activity四种启动模式 标准模式 standard 栈顶复用模式 singleTop 栈内复用模式 singleTask 单例模式 singleInstance 任务栈 Activit ...