(整理).net实现条形码与二维码
本文由来源网络的知识点组合而成,感谢分享的作者,文章结尾处给出查询资料连接。
条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符。常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成的平行线图案。条形码可以标出物品的生产国、制造厂家、商品名称、生产日期、图书分类号、邮件起止地点、类别、日期等许多信息,因而在商品流通、图书管理、邮政管理、银行系统等许多领域都得到广泛的应用。
二维码(Quick Response Code),又称二维条码,它是用特定的几何图形按一定规律在平面(二维方向)上分布的黑白相间的图形,是所有信息数据的一把钥匙。在现代商业活动中,可实现的应用十分广泛,如:产品防伪/溯源、广告推送、网站链接、数据下载、商品交易、定位/导航、电子商务应用、车辆管理、信息传递等
本文示例中使用了zxing链接库:
1,添加引用和命名空间
using com.google.zxing;
using com.google.zxing.qrcode.decoder;
using COMMON = com.google.zxing.common;
2,二维码和条形码生成方法(生成图片)
public static Bitmap toBitmap(COMMON.ByteMatrix matrix, string scolor, string qcolor)
{
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(scolor) : ColorTranslator.FromHtml(qcolor));
}
}
return bmap;
}
public static void CreateQRCode(string strContent, ref Image QRImage)//二维码
{
try
{
string Scolor = "0xFF000000";//二维码颜色
string Qcolor = "0x00FFFFFF";//背景颜色
Hashtable hints = new Hashtable();
var error = ErrorCorrectionLevel.M;
hints.Add(EncodeHintType.ERROR_CORRECTION, error);
COMMON.ByteMatrix byteMatrix1 = new MultiFormatWriter().encode(strContent, BarcodeFormat.QR_CODE, 200, 200, hints);
QRImage = MyCommon.toBitmap(byteMatrix1, Scolor, Qcolor);//MyCommon是我的类名
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
public static void CreateQRCode(string strContent, ref Image QRImage)//条形码,EAN13码
{
try
{
string Scolor = "0xFF000000";//条码颜色
string Qcolor = "0x00FFFFFF";//背景颜色
Hashtable hints = new Hashtable();
var error = ErrorCorrectionLevel.M;
hints.Add(EncodeHintType.ERROR_CORRECTION, error);
COMMON.ByteMatrix byteMatrix2 = new MultiFormatWriter().encode(strContent, BarcodeFormat.EAN_13, 300, 80);
QRImage = MyCommon.toBitmap(byteMatrix2, Scolor, Qcolor);//MyCommon是我的类名
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
3 二维码或条码的存储
在实际工作中,常常需要存储二维码或条码,这里提供一种存储方式,将二维码或条码转换成二进制字符串,并保存在数据库即可
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO; public static byte[] BinaryPhoto(String FileName)
{
FileStream fs = new FileStream(FileName, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
byte[] pByte = br.ReadBytes((int)fs.Length);
fs.Close(); return pByte;
} public static Image ConvToPhoto(byte[] pByte)
{
MemoryStream ms = new MemoryStream(pByte, 0, pByte.Length);
Image gImage = Image.FromStream(ms);
ms.Close(); return gImage;
}
注意:将二进制流数据存储在数据库中,需要先进行转换将二进制数据转换为base64格式的字符串(获取时需要解码),否则会有惊喜。。
4 二维码增加logo
二维码中间增加图片的原理是利用二维码的纠错级别,在现有二维码图片允许的(logo)大小情况下增加logo。
4.1二维码的纠错级别
var errCorrLvl = ErrorCorrectionLevel.M;
var corrRatio = 0.15;
switch (this.cbocorrection.SelectedIndex)
{
case 0: errCorrLvl = ErrorCorrectionLevel.L; corrRatio = 0.07; break;
case 1: errCorrLvl = ErrorCorrectionLevel.M; corrRatio = 0.15; break;
case 2: errCorrLvl = ErrorCorrectionLevel.Q; corrRatio = 0.25; break;
case 3: errCorrLvl = ErrorCorrectionLevel.H; corrRatio = 0.30; break;
}
4.2 判断logo是否在允许范围内
var logo = new Bitmap(this.txtLogoFile.Text);
var ratio = (double)(logo.Width * logo.Height) / (double)(bitmap.Width * bitmap.Height);
if (ratio < corrRatio * 0.6) // 标志图片大小最大只能占到最大容错面积的60%以保证图片高可读性
{
…………………………
}
4.3 增加logo方法
/// <summary>在二维码位图上绘制标志。</summary>
private void CreateQRCodeBitmapWithPortrait(Bitmap qrCode, Bitmap logo)
{
Graphics g = Graphics.FromImage(qrCode);
// 设置头像要显示的位置,即居中显示
int rectX = (qrCode.Width- logo.Width) / 2;
int rectY = (qrCode.Height - logo.Height) / 2;
g.DrawImage(logo, rectX, rectY); g.Dispose();
}
5 网络资源
某度百科条形码、二维码
http://blog.csdn.net/suntongo/article/details/8742023
http://blog.csdn.net/nodbrag/article/details/12438411
http://www.cnblogs.com/xuhang/p/3831776.html
http://www.cnblogs.com/xuhang/p/3832118.html
http://www.cnblogs.com/rophie/archive/2012/03/02/2376946.html
http://www.cnblogs.com/mzlee/archive/2011/03/19/Lee_Barcode.html
http://www.cnblogs.com/Soar1991/archive/2012/03/30/2426115.html
http://www.cnblogs.com/lykbk/p/3818863.html (asp.net例子)
http://www.cnblogs.com/freeliver54/p/3430956.html(图片存储转换)
(整理).net实现条形码与二维码的更多相关文章
- 实例源码--ZXing识别条形码和二维码识别源码
下载源码 技术要点: 1.ZXing库的 使用 2.识别条形码和二 维码 3.自定义视图 4.源码带有非常详 细的中文注释 ...... 详细介绍: 1.ZXing库 ZXing是个很经典的条码/ ...
- [转]用C#实现的条形码和二维码编码解码器
条形码的标准: 条形码的标准有ENA条形码.UPC条形码.二五条形码.交叉二五条形码.库德巴条形码.三九条形码和128条形码等,而商品上最常使用的就是EAN商品条形码.EAN商品条形码亦称通用商品条形 ...
- 用C#实现的条形码和二维码编码解码器
本文主要介绍可以在C#中使用的1D/2D编码解码器.条形码的应用已经非常普遍,几乎所有超市里面的商品上面都印有条形码:二维码也开始应用到很多场合,如火车票有二维码识别.网易的首页有二维码图标,用户只需 ...
- asp.net 生成、解析条形码和二维码
原文 asp.net 生成.解析条形码和二维码 一.条形码 一维码,俗称条形码,广泛的用于电子工业等行业.比如我们常见的书籍背面就会有条形码,通过扫描枪等设备扫描就可以获得书籍的ISBN(Intern ...
- 基于opencv3.0和下的条形码与二维码识别
其中对条码与二维码的识别分为以下4个步骤 1. 利用opencv和Zbar(或者Zxing)对标准的条形码图片(即没有多余背景干扰,且图片没有倾斜)进行解码,将解码信息显示出来,并与原始信息对比. 2 ...
- C# 利用ZXing.Net来生成条形码和二维码
本文是利用ZXing.Net在WinForm中生成条形码,二维码的小例子,仅供学习分享使用,如有不足之处,还请指正. 什么是ZXing.Net? ZXing是一个开放源码的,用Java实现的多种格式的 ...
- C#利用Zxing.net生成条形码和二维码并实现打印的功能
开篇:zxing.net是.net平台下编解条形码和二维码的工具. 下载地址:http://pan.baidu.com/s/1kTr3Vuf Step1:使用VS2010新建一个窗体程序项目: ...
- 使用谷歌Z生成条形码以及二维码
下载地址:http://zxingnet.codeplex.com/ zxing.net是.net平台下编解条形码和二维码的工具,使用非常方便. 首先下载二进制dll文件,引入工程: using Sy ...
- Android之条形码、二维码扫描框架(非原创)
文章大纲 一.条形码.二维码扫描框架介绍二.条形码.二维码的区别和组成结构介绍三.条形码.二维码扫描框架应用场景四.BGAQRCode-Android框架实战五.项目源码下载六.参考文章 一.条形码. ...
随机推荐
- ORACLE 包[转]
包的作用: 包可以将任何出现在块声明的语句 ( 过程 , 函数 , 游标 , 游标 , 类型 , 变量 ) 放于包中 , 相当于一个容器 .使用包的好处不仅仅是程序的分组管理,还可以使用包中的程序重载 ...
- MyBatis插入多条
<insert id="insertProjectPropertyRelList" parameterType="java.util.List"> ...
- PhoneGap 在 Android 上的插件开发方法介绍
移动应用开发已经成为软件开发的一个重要方向,但是移动开发面临的一个重要问题就是跨平台的问题.PhoneGap 作为一个多平台的软件开发框架,提供了一次编写多个平台的运行.目前已经支持多达 6 个移动平 ...
- The word is not correctly spelled问题解决
今天在做Ant/Xdoclet辅助生成hibernate实体映射文件时,eclipse出现了极其让我郁闷的错误,"The word is not correctly spelled" ...
- 初级——程序如何打包成apk文件
将Eclipse Android项目打包成APK文件是本文要介绍的内容,主要是来了解并学习Eclipse Android打包的内容,具体关于Eclipse Android内容的详解来看本文.Eclip ...
- HTML 段落
可以把 HTML 文档分割为若干段落. HTML 段落 段落是通过 <p> 标签定义的. 实例 <p>This is a paragraph</p> <p&g ...
- 程序员书单_HTML篇
JavaScript权威指南(第六版) http://download.csdn.net/detail/shenzhq1980/9137733 改善JavaScript程序的188个建议 http:/ ...
- sphinx 配置实例
配置实例 3.1.数据源. 这里我们采用 mysql的数据源.具体情况如下: Mysql server:192.168.1.10 Mysql db :test Mysql 表:test.sphinx_ ...
- asp.net中Respons.Write()的用法
很多时候,我们为了是页面的传输速率更高.很自然回去选择脚本和ajax结合进行传值,在传值如要向页面回传数据时,可能只有一次也会是多次.一次的情况下我们可以很好的用Respons.End()方法来截取我 ...
- eclipse调试总结(转)
Debug视图 认识debug视图,红色部分框为线程堆栈视图,黄色部分框为表达式.断点.变量视图,蓝色部分为代码视图. 线程堆栈视图 分别介绍一下这几个按钮的含义: 1.表示当前实现继续运行直到下一 ...