手把手教你做超酷的条形码效果第1/3页

原创作品,转载请注明出处By dknt From bbs.blueidea.com
声明:
1.这篇文章教你在web页面上实现条形码效果,体现的是利用网页制作技术综合解决问题的思路。旨在使对HTML, JavaScript,PhotoShop具有入门级水平的人巩固入门级水平。
2.若有问题不能及时回复,麻烦请担待,不胜感激。
3.高手免进。

制作条形码总共分几步?
第一步,把冰箱门儿打开——使用PhotoShop绘制小图片

我们需要制作出一个含有16个元素的条形码图片。

首先打开Photoshop,本篇教程中使用的是CS 简体中文 版本,仅就本教程所涉及的方面来看,操作都大同小异,只要认真阅读,应该不会遇到问题。

  • 打开以后首先按Ctrl + N,建一个 8像素 X 8像素的图片,背景选择透明,如图所示:
    screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('/upload/200742411113941.gif');}" alt="" src="http://zsrimg.ikafan.com/upload/200742411113941.gif" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>

  • 为了看清楚,可以把图片缩放到最大 1600%。

  • 按一下D,再按一下X,确保前景色为白色背景色为黑色。

  • 使用Ctrl+Delele,填充背景色,黑色。

  • 使用铅笔笔工具,参数做如下设置
    screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('/upload/200742411114706.gif');}" alt="" src="http://zsrimg.ikafan.com/upload/200742411114706.gif" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>

  • 刻画线条,隔一列画一个。画成下面这种效果:
    screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('/upload/200742411115190.gif');}" alt="" src="http://zsrimg.ikafan.com/upload/200742411115190.gif" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>

  • 将图层1拖动到下面的新建按钮上复制一下
    screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('/upload/200742411115207.gif');}" alt="" src="http://zsrimg.ikafan.com/upload/200742411115207.gif" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>

  • 选择 图层1 副本,将左边第一道白色用铅笔工具涂成黑色(可以按 X 将前景色变成黑色)。如下图所示:
    screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('/upload/200742411115432.gif');}" alt="" src="http://zsrimg.ikafan.com/upload/200742411115432.gif" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>

  • 选择 图层1 ,按Ctrl+A,再按 Ctrl + C,然后选择菜单命令图像=画布大小, 将宽度调整为16个像素,点中 定位 的最左边中间的小块,如下图所示:
    screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('/upload/200742411115836.gif');}" alt="" src="http://zsrimg.ikafan.com/upload/200742411115836.gif" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>

  • 选择 图层1 副本。按住Ctrl键,左键单击图层面板上的 图层1 副本 条目以选择 图层1 副本 的选区。按Ctrl + Shift + I 反选(这一系列也可以用魔术棒操作,选择透明部分就可以了)。按Ctrl + V 粘贴成 图层2。

  • 关闭 图层1 和 图层1 副本 的可见性(左键点击小眼睛图标),选择图层2,将左边第二道白色用铅笔工具涂成黑色。如下图所示:
    screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('/upload/200742411115625.gif');}" alt="" src="http://zsrimg.ikafan.com/upload/200742411115625.gif" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>

  • 打开 图层1副本 的可见性,确保选择了图层2,按Ctrl + E 向下合并。

  • 打开 图层1 的可见性,按住Ctrl键,左键单击图层面板上的 图层1 条目以选择 图层1 的选区。复制并扩大画布,按前面所述的方法继续绘制。在宽度为24,32的时候再做两次,分别把 图层1 模式(pattern)的第三和第四条白色涂成黑色。最后的结果如下图所示:
    screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('/upload/200742411115465.gif');}" alt="Click here to open new window CTRL+Mouse wheel to zoom in/out" src="http://zsrimg.ikafan.com/upload/200742411115465.gif" width=716 onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0 resized="true">

  • 接下来还需要拓宽,方法是一样的,只不过这次的模式变换的方案是把相邻两个白色之间的黑色涂成白色。比如第五次拓展,其模式是这个样子:
    screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('/upload/200742411115784.gif');}" alt="" src="http://zsrimg.ikafan.com/upload/200742411115784.gif" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>

  • 再做几次后,等宽度为 64 时,画布看起来应该是这个样子的:
    screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('/upload/200742411116620.gif');}" alt="" src="http://zsrimg.ikafan.com/upload/200742411116620.gif" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>

  • 接下来仍然需要拓宽,思想是删掉相邻两个白色条(注意,可以认为第4个白条和第一个白条是相邻的),于是再做4次的效果是这样的:
    screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('/upload/200742411118698.gif');}" alt="" src="http://zsrimg.ikafan.com/upload/200742411118698.gif" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>

  • 还差32个像素就完成了,还需再拓宽,这次是填充两个相邻黑色条为白色条,最后效果如下:
    screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('/upload/200742411118237.gif');}" alt="" src="http://zsrimg.ikafan.com/upload/200742411118237.gif" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>

  • 图层1 可以不要了,删掉即可。

  • 接下来我们要去掉黑色的部分,使其透明。使用魔棒工具,将选项做如下设置:
    screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('/upload/200742411119221.gif');}" alt="" src="http://zsrimg.ikafan.com/upload/200742411119221.gif" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>
    选择以后,按delete键删除,则整个画布变成如下形式:
    screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('/upload/200742411119157.gif');}" alt="" src="http://zsrimg.ikafan.com/upload/200742411119157.gif" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>
    似乎乱七八糟,是PS对透明背景表达的问题,只要保证步骤对了,做成这个效果就行了。

  • 大功告成选择文件 -- 另存为,类型选择为 gif, 可以起名叫 barcode.gif,在下下面的对话框中,透明这一项一定要选中。 找个合适的地方放好。
    screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open('/upload/200742411119257.gif');}" alt="" src="http://zsrimg.ikafan.com/upload/200742411119257.gif" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" border=0>

  • 于是冰箱门打开了,如果你做出的不是这个样子,用我这个做好的就行了,免得大象装不进去。

第二步,把大象装进去——代码分析
我们的目标是把一个字符串转化为一个条形码显示在页面上。那么一个字符串如何对应出一个条形码呢?上面做个128X8的图片到底是要扯什么蛋?

我们可以考虑数据在存储器中的最基本储存单位——字节(byte) 一个字节是八位(bit)。一个8位二进制数可以通过一个2位的十六进制数表示,表示为 00 - FF。刚才提到了一个16,注意到了吗?

如何把一个字符串转换成字节表示呢?似乎不能直接表示,但是J(ava)script 中的字符串有一个charCodeAt()方法。我们知道单字节若表示整数,其范围是 0 -255,双字节若表

示正整数,范围是 0 - 65535。charCodeAt()方法返回的是一个字符的Unicode表示,这种Unicode方案中,中文是两个字节的,英文是一个字节的。所以对于一个英文字符它总是返回0 - 255 之间的正整数,对于一个中文字符,它总是返回 255 - 65535 之间的正整数(非精确范围)。

再讲一下位运算的知识吧,节选自微软的Jscript脚本参考手册:

  • 对于与运算。 &运算符查看两个表达式的二进制表示法的值,并执行按位“与”操作。该操作的结果如下所示:

    0101   (expression1)
    1100   (expression2)
    ----
    0100   (result)
    任何时候,只要两个表达式的某位都为 1,则结果的该位为 1。否则,结果的该位为 0。

  • 对于移位运算,比如右移运算。expression1 >> expression2 中,>> 运算符 把 expression1 的所有位向右移 expression2 指定的位数。expression1 的符号位被用来填充右移后左边空出来的位。向右移出的位被丢弃。例如,下面的代码被求值后,temp 的值是 -4:-14 (即二进制的 11110010)右移两位等于 -4 (即二进制的 11111100)。

var temp
temp = -14 >> 2
注:32位整数类型的数据有符号位的问题,对于负数,填充位为1,正数为0。我们通过charCodeAt()得到的数都是正数,所以不用管这个问题。
对于一个8位二进制数,与二进制 11110000 相与,再右移4位,则可以得到它的最左四位。
直接与 1111 相与,则可以得到他的右边四位。
准备知识了解这么多够了,下面让我开始实践编码。
说,要有一个字符串,于是就有了个字符串。
var strTest = "dknt没有任何含义";
我们就是要把这个字符串转化为一个条形码。
我们要获得它的二进制表示,那我们就建一个函数来获得它的二进制表示。比如 getBinary();

function getBinary(sText){
alert(sText);
};
var strTest = "dknt没有任何含义";
getBinary(strTest );

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

提示:您可以先修改部分代码再运行
为了获得二进制表示,我们要一个字符一个字符的进行,不能着急,首先要获得每个字符对应的Unicode编码。

function getBinary(sText){
for(var i = 0; i

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

大于 255 的显然是占用两个字节的字符。要想办法分成单一字节的两个数据,以使程序流易于自动化一些。可以使用双字节数值与 二进制 1111111100000000 相与再右移8位来获得第一个字节。直接与11111111相与就可以得到第二个字节的数据。使用十六进制数可能更方便一点。1111111100000000 的十六进制表示为 FF00。11111111显然就是 FF了。
J(ava)script中,用0x前缀表示十六进制数。我们可以实践一下下面的代码。

function getBinary(sText){
for(var i = 0; i 255 ){
alert( (iDecimalUnicode & 0xFF00) >> 8);
alert( iDecimalUnicode & 0xFF );
}else{
alert( iDecimalUnicode );
}
}
};
var strTest = "dknt没有任何含义";
getBinary(strTest );

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

可以看到现在每个数都是小于255的了。
注意,(iDecimalUnicode & 0xFF00) >> 8 中,>> 的优先级比 & 高,所以按照我们的目的,(iDecimalUnicode & 0xFF00) 一定要有括号。 
我们希望能有个统一的处理逻辑,把每个字节分成两部分,每个部分用十六进制的1位就可以表示,换句话说,就是每部分都是一个不超过16的十进制数。类似Ruby中的代码段数据类型,在J(ava)script中,也可以用匿名函数来实现类似的功能。我们可以建一个名为tmpOP变量来承接这个匿名函数,然后利用它来简化程序逻辑。此外,我们应该有个东西来储存分解出来的结果。那就用个result数组来装吧。另外按照语义,我们这个函数做的已经不仅仅是转化二进制了,而是转化成意义上的十六进制位了。我们应该是恨敏捷的,所以把函数名改成getHexes吧。

function getHexes(sText){
var aResult = [];
var tmpOP = function(iByte){
aResult.push( (iByte & 0xF0) >> 4 );
aResult.push( iByte & 0xF );
};
for(var i = 0; i 255 ){
tmpOP( (iDecimalUnicode & 0xFF00) >> 8);
tmpOP( iDecimalUnicode & 0xFF );
}else{
tmpOP( iDecimalUnicode );
}
}
alert(aResult);
};
var strTest = "dknt没有任何含义";
getHexes(strTest );

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

很高兴看到现在就弹出一个alert吧,刚才那么多alert是很闹心。我很抱歉。这次因为我们使用了alert一个数组,感觉整齐一点。

现在发现数组的每一个元素都是小于16了吧,很好,大象快装进去了。

有一个问题,我们不能把字符串的每个字符都转化成条形码,若是一个1万多字的文章怎么办,那不扯呢吗。所以我们要限制一下处理的字符数。以条形码的视点来看,似乎宽度应该是固定的,也就是说我们用以对应的 aResult 数组的长度应该是固定的。那也好办,在我们的 tmpOP 里控制一下就行了。我们可以假设我们只需要8个十六进制位来生成条形码。可以在getHexes里加一个 iMaxLength 参数来控制。
如下:

function getHexes(sText, iMaxLength){
var aResult = [];
var tmpOP = function(iByte){
aResult.push( (iByte & 0xF0) >> 4 );
if( aResult.length > iMaxLength ) return 0;
aResult.push( iByte & 0xF );
if( aResult.length > iMaxLength ) return 0;
return 1;
};
for(var i = 0; i 255 ){
if( !tmpOP( (iDecimalUnicode & 0xFF00) >> 8) ) break;;
if( !tmpOP( iDecimalUnicode & 0xFF ) ) break;
}else{
if( !tmpOP( iDecimalUnicode ) ) break;
}
}
alert(aResult);
};
var strTest = "dknt没有任何含义";
var iWidth = 8;
getHexes(strTest, iWidth);

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

现在确实只有8个小于16的数了。

在 tmpOP 中,发现 aResult 数组的长度超过最大值,就返回一个0,外面发现这个0以后,就直接退出循环,因为没有必要再继续往下取字符了。

有些地方略显不妥,本着精益求精的精神,我们要把我们的程序效率提高提高。首先,我们知道了位相与的目的,就可以写一些更直接处理的代码,因为我们把处理双字节时,为了分成两个单字节,实际上多与运算了一次,和后面的分解双十六进制位有重复的位相与。说俗了就是多干了一次没用的事。不如一次就分解出4个十六进制位。

此外,我们总是向数组询问length属性来获知数组长度,要知道数组做这件事是很累的,反正我们也有条件自己心理有数,为什么还要总问它呢。

基于这两点,我们把程序改动如下:

function getHexes(sText, iMaxLength){
var aResult = [], aPos=[0xF, 0xF0, 0xF00, 0xF000], iLength = 0;
var tmpOP = function(iByte, iPos){
aResult.push( (iByte & aPos[iPos]) >> iPos * 4 );
iLength++
if( iLength == iMaxLength ) return 0;
return 1;
};
for(var i = 0; i 255 ){
if( !tmpOP( iDecimalUnicode , 3) ) break;;
if( !tmpOP( iDecimalUnicode , 2) ) break;
if( !tmpOP( iDecimalUnicode , 1) ) break;
if( !tmpOP( iDecimalUnicode , 0) ) break;
}else{
if( !tmpOP( iDecimalUnicode , 1) ) break;;
if( !tmpOP( iDecimalUnicode , 0) ) break;
}
}
alert(aResult);
};
var strTest = "dknt没有任何含义";
var iWidth = 8;
getHexes(strTest, iWidth);

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

看到了效果跟上一个是一样的,说明我们没改错。其中,aPos数组就可以储存掩码,数组的索引 X 4 就是需要右移的位数。tmpOP( iDecimalUnicode , i) 就表示取 iDecimalUnicode 从右边数第i个十六进制位(第0个就是最右边的1个十六进制位)。

大象是勉勉强强塞进去了,下面我们就把活做的利索点,把冰箱门儿带上。要不条形码还没露面,我们怎么收场?

当前1/3页 123下一页阅读全文

(0)

相关推荐

  • Android上使用ZXing识别条形码与二维码的方法

    目前有越来越多的手机具备自动对焦的拍摄功能,这也意味着这些手机可以具备条码扫描的功能.手机具备条码扫描的功能,可以优化购物流程,快速存储电子名片(二维码)等. 本文所述实例就使用了ZXing 1.6实现条码/二维码识别.ZXing是个很经典的条码/二维码识别的开源类库,早在很久以前,就有开发者在J2ME上使用ZXing了,只不过需要支持JSR-234规范(自动对焦)的手机才能发挥其威力,而目前已经有不少Android手机具备自动对焦的功能. 本文代码运行的结果如下,使用91手机助手截图时,无法截

  • php实现在线生成条形码示例分享(条形码生成器)

    复制代码 代码如下: <?phpdefine('IN_CB',true);include('header.php'); $keys = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','-','.',' ','$','/','+','%'); $n

  • ASP.net(c#)生成条形码 code39条码生成方法

    这几天一直在弄128条码的事情,找了相关的资料,也没找到.后来没办法只能改成code39的条码.现在把它写出来,与大家分享 1.先下载一种免费的 code39条码字体 2.建个类 为 code39 并写入以下代码 复制代码 代码如下: public sealed class Code39 { #region private variables /// <summary> /// The Space Between each of Title, BarCode, BarCodeString //

  • 史上最简洁C# 生成条形码图片思路及示例分享

    在网上看到一些人写关于条形码的代码都很长,有的甚至拿来卖,所以查了下资料,希望能对大家有帮助. 我的实现原理是: 其实Windows本身就有一个字体是用来显示条形码的. 只要将数字改为这种字体就变成了条形码. windows字体库下,有如下八种字体可以用来将数字转换成条形码: 复制代码 代码如下: Code39AzaleaNarrow1 Code39AzaleaNarrow2 Code39AzaleaNarrow3 Code39AzaleaRegular1 Code39AzaleaRegular

  • C#实现用于生成条形码的类

    本文实例讲述了C#实现用于生成条形码的类.分享给大家供大家参考.具体如下: 这个C#类可以用来生成39码 12位标准条形码 using System.Collections; using System.Text.RegularExpressions; namespace DotNet.Utilities { public class BarCodeToHTML { public static string get39(string s, int width, int height) { Hash

  • asp.net用Zxing库实现条形码输出的具体实现

    这个简单的问题,困扰了我将近两个小时,主要是再官方文档上没有找到demo,那只能用搜索引擎了,看看其他程序员写的程序,但是发现处处是坑,看了四五个例子,没有一个可以正常运行的,全部报错,经过一个多小时的尝试,才最终搞定.不多说了,直接上截图和代码. 首先要在项目中添加zxing.dll引用(zxing.dll下载地址http://www.jb51.net/dll/zxing.dll.html) 其次就是建立aspx文件,在后台中代码如下 复制代码 代码如下: using ZXing.Common

  • C#生成code128条形码的方法

    本文实例讲述了物流条形码的C#实现方法,分享一下供大家参考.具体实现方法如下: 主要功能代码如下: using System; using System.Collections.Generic; using System.Data; using System.Drawing; namespace Code { class BarCode { public class Code128 { private DataTable m_Code128 = new DataTable(); private

  • asp.net(C#)生成Code39条形码实例 条码枪可以扫描出

    复制代码 代码如下: using System;using System.Collections;using System.ComponentModel;using System.Drawing;using System.Data; namespace MSCL{    /// <summary>    /// 生成条码Code39    /// </summary>    public class Code39    {      private Hashtable m_Code

  • PHP生成条形码大揭秘

    1.什么是条形码? 百度百科定义:条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符.常见的条形码是由反射率相差很大的黑条(简称条)和白条(简称空)排成平行线的图案.在日常生活中,条形码可以标出物品的生产国.制造厂家.商品名称.生产日期.图书分类号.邮件地点起止.类别.日期等许多信息.条形码编码格式具体请参考 打印出来的优惠券,商家需要用验证器读取条形码,来获得其有效性. 2.如何生成条形码? 首先找到强大的开源资料,在barcode官网下

  • C#生成Code39条形码而非条形码字体的方法

    由于Code39编译简单.能够对任意长度的数据进行编码.支持设备比较广泛所以被广泛的采用,下面通过文字说明和代码分析给大家介绍下C#生成Code39条形码而非条形码字体的方法. 能够对任意长度的数据进行编码.其局限在于印刷品的长度和条码阅读器的识别范围. 支持设备广泛.目前几乎所有的条形码阅读设备都能阅读Code39码,打印机也是同样情况. 编制简单.简单的开发技术就能快速生成相应的编码图像. 一般Code39码由5条线和分开它们的4条缝隙共9个元素构成.线和缝隙有宽窄之分,而且无论线还是缝隙仅

  • C#生成条形码图片的简单方法

    本文实例讲述了C#生成条形码图片的简单方法.分享给大家供大家参考.具体实现方法如下: 实现原理: 其实Windows本身就有一个字体是用来显示条形码的. 只要将数字改为这种字体就变成了条形码. windows字体库下,有如下八种字体可以用来将数字转换成条形码: Code39AzaleaNarrow1 Code39AzaleaNarrow2 Code39AzaleaNarrow3 Code39AzaleaRegular1 Code39AzaleaRegular2 Code39AzaleaWide1

  • zbar解码二维码和条形码示例

    复制代码 代码如下: #!/usr/bin/env python# coding: u8import osimport zbarimport Imageimport urllibimport uuiddef qrRead(url): uuid1 = uuid.uuid1()filename=str(uuid1)+".jpg"print uuid1 urllib.urlretrieve(url, filename) # create a readerscanner = zbar.Imag

  • php生成EAN_13标准条形码实例

    下面的就是生成EAN_13标准的条码的PHP方法,需要php+gd 环境    复制代码 代码如下: <? function EAN_13($code) {   //一个单元的宽度   $lw = 2;   //条码高    $hi = 100;   // the guide code is no coding,is used to show the left part coding type//   // Array guide is used to record the EAN_13 is

随机推荐