PHP 生成条形码
<?php
class BarCode128 {
const STARTA = 103;
const STARTB = 104;
const STARTC = 105;
const STOP = 106;
private $unit_width = 2; //单位宽度 缺省1个象素
private $is_set_height = false;
private $width = -1;
private $heith = 70;
private $quiet_zone = 6;
private $font_height = 15;
private $font_type = 5;
private $color =0x000000;
private $bgcolor =0xFFFFFF;
private $image = null;
private $codes = array("212222","222122","222221","121223","121322","131222","122213","122312","132212","221213","221312","231212","112232","122132","122231","113222","123122","123221","223211","221132","221231","213212","223112","312131","311222","321122","321221","312212","322112","322211","212123","212321","232121","111323","131123","131321","112313","132113","132311","211313","231113","231311","112133","112331","132131","113123","113321","133121","313121","211331","231131","213113","213311","213131","311123","311321","331121","312113","312311","332111","314111","221411","431111","111224","111422","121124","121421","141122","141221","112214","112412","122114","122411","142112","142211","241211","221114","413111","241112","134111","111242","121142","121241","114212","124112","124211","411212","421112","421211","212141","214121","412121","111143","111341","131141","114113","114311","411113","411311","113141","114131","311141","411131","211412","211214","211412","2331112");
private $valid_code = -1;
private $type ='B';
private $start_codes =array('A'=>self::STARTA,'B'=>self::STARTB,'C'=>self::STARTC);
private $code ='';
private $bin_code ='';
private $text ='';
public function __construct()
{ }
public function setUnitWidth($unit_width)
{
$this->unit_width = $unit_width;
$this->quiet_zone = $this->unit_width*6;
$this->font_height = $this->unit_width*15;
if (!$this->is_set_height)
{
$this->heith = $this->unit_width*35;
}
}
public function setFontType($font_type)
{
$this->font_type = $font_type;
}
public function setBgcolor($bgcoloe)
{
$this->bgcolor = $bgcoloe;
}
public function setColor($color)
{
$this->color = $color;
}
public function setCode($code)
{
if ($code !='')
{
$this->code= $code;
if ($this->text ==='')
$this->text = $code;
}
}
public function setText($text)
{
$this->text = $text;
}
public function setType($type)
{
$this->type = $type;
}
public function setHeight($height)
{
$this->height = $height;
$this->is_set_height = true;
}
private function getValueFromChar($ch)
{
$val = ord($ch);
try
{
if ($this->type =='A')
{
if ($val > 95)
throw new Exception(' illegal barcode character '.$ch.' for code128A in '.__FILE__.' on line '.__LINE__);
if ($val < 32)
$val += 64;
else
$val -=32;
}
elseif ($this->type =='B')
{
if ($val < 32 || $val > 127)
throw new Exception(' illegal barcode character '.$ch.' for code128B in '.__FILE__.' on line '.__LINE__);
else
$val -=32;
}
else
{
if (!is_numeric($ch) || (int)$ch < 0 || (int)($ch) > 99)
throw new Exception(' illegal barcode character '.$ch.' for code128C in '.__FILE__.' on line '.__LINE__);
else
{
if (strlen($ch) ==1)
$ch .='0';
$val = (int)($ch);
}
}
}
catch(Exception $ex)
{
errorlog('die',$ex->getMessage());
}
return $val;
}
private function parseCode()
{
$this->type=='C'?$step=2:$step=1;
$val_sum = $this->start_codes[$this->type];
$this->width = 35;
$this->bin_code = $this->codes[$val_sum];
for($i =0;$i<strlen($this->code);$i+=$step)
{
$this->width +=11;
$ch = substr($this->code,$i,$step);
$val = $this->getValueFromChar($ch);
$val_sum += $val;
$this->bin_code .= $this->codes[$val];
}
$this->width *=$this->unit_width;
$val_sum = $val_sum%103;
$this->valid_code = $val_sum;
$this->bin_code .= $this->codes[$this->valid_code];
$this->bin_code .= $this->codes[self::STOP];
}
public function getValidCode()
{
if ($this->valid_code == -1)
$this->parseCode();
return $this->valid_code;
}
public function getWidth()
{
if ($this->width ==-1)
$this->parseCode();
return $this->width;
}
public function getHeight()
{
if ($this->width ==-1)
$this->parseCode();
return $this->height;
}
public function createBarCode($code='',$text='',$file_name=null,$type='B', $image_type ='png')
{
if (in_array($type,array('A','B','C')))
$this->setType($type);
else
$this->setType('B');
if ($code !=='')
$this->setCode($code);
if ($text !=='')
$this->setText($text); $this->parseCode();
$this->image = ImageCreate($this->width+2*$this->quiet_zone,$this->heith + $this->font_height);
$this->bgcolor = imagecolorallocate($this->image,$this->bgcolor >> 16,($this->bgcolor >> 8)&0x00FF,$this->bgcolor & 0xFF);
$this->color = imagecolorallocate($this->image,$this->color >> 16,($this->color >> 8)&0x00FF,$this->color & 0xFF);
ImageFilledRectangle($this->image, 0, 0, $this->width + 2*$this->quiet_zone,$this->heith + $this->font_height, $this->bgcolor);
$sx = $this->quiet_zone;
$sy = $this->font_height -1;
$fw = 10; //編號為2或3的字體的寬度為10,為4或5的字體寬度為11
if ($this->font_type >3)
{
$sy++;
$fw=11;
}
$ex = 0;
$ey = $this->heith + $this->font_height - 2;
for($i=0;$i<strlen($this->bin_code);$i++)
{
$ex = $sx + $this->unit_width*(int) $this->bin_code{$i} -1;
if ($i%2==0)
ImageFilledRectangle($this->image, $sx, 1, $ex, 60, $this->color); // 原 ImageFilledRectangle($this->image, $sx, $sy, $ex,$ey, $this->color); $sy 改为1 条形码距离顶部1距离 $ey 改为60 条形码高度60
$sx =$ex + 1;
}
$t_num = strlen($this->text);
$t_x = $this->width/$t_num;
$t_sx = ($t_x -$fw)/2; //目的为了使文字居中平均分布
for($i=0;$i<$t_num;$i++)
{
imagechar($this->image,$this->font_type,6*$this->unit_width +$t_sx +$i*$t_x,65,$this->text{$i},$this->color); // 原 imagechar($this->image,$this->font_type,6*$this->unit_width +$t_sx +$i*$t_x,0,$this->text{$i},$this->color); 将0改为65 文本距离顶部65距离
}
if (!$file_name)
{
header("Content-Type: image/".$image_type);
}
switch ($image_type)
{
case 'jpg':
case 'jpeg':
Imagejpeg($this->image,$file_name);
break;
case 'png':
Imagepng($this->image,$file_name);
break;
case 'gif':
break;
Imagegif($this->image,$file_name);
default:
Imagepng($this->image,$file_name);
break;
}
}
}
$barcode = new BarCode128();
//第一个参数为用来生成条形码的字符串,第二个参数为条形码下面显示的字符内容,第三个为生成的路径文件名称
$barcode->createBarCode('SP89867','SP8986712','test.png');
?>
PHP 生成条形码的更多相关文章
- C# 在Word文档中生成条形码
C# 在Word文档中生成条形码 简介 条形码是由多个不同的空白和黑条按照一定的顺序组成,用于表示各种信息如产品名称.制造商.类别.价格等.目前,条形码在我们的日常生活中有着很广泛的应用,不管是在图书 ...
- 使用html2canvas实现批量生成条形码
/*前台代码*/ <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Generat ...
- JAVA生成条形码
1.下载生成条形码所需要的jar包barcode4j.jar: 2.java生成条形码代码 import java.awt.image.BufferedImage;import java.io.Fil ...
- C# 生成条形码
原文地址:http://www.cnblogs.com/xcsn/p/4514759.html 引用BarcodeLib.dll(百度云中有)生成条形 protected void Button2_C ...
- C# 利用BarcodeLib.dll生成条形码(一维,zxing,QrCodeNet/dll二维码)
原文:http://blog.csdn.net/kongwei521/article/details/17588825 首先效果: 一.下载BarcodeLib.dll 下载地址 :http://do ...
- PHP5生成条形码器
前阵子在做一个商家优惠券的功能,需要用到条形码,于是将资料重新整理下. 1.什么是条形码? 百度百科定义:条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息 ...
- PHP生成条形码
前阵子在做一个商家优惠券的功能,需要用到条形码,于是将资料重新整理下. 1.什么是条形码? 百度百科定义:条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息 ...
- C# 利用BarcodeLib.dll生成条形码
首先效果: 1:首先下载BarcodeLib.dll 下载地址 http://pan.baidu.com/share/link?shareid=2590968386&uk=2148890391 ...
- 使用PHP-Barcode轻松生成条形码(一)
最近由于工作需要,研究了一下PHP如何生成条形码.虽然二维码时下比较流行,但是条形码依然应用广泛,不可替代.园子里有很多讲利用PHP生成条形码的文章,基本上都是围绕Barcode Bakery的,它虽 ...
- java 生成条形码
package com.sun.erwei; import java.awt.image.BufferedImage;import java.io.ByteArrayOutputStream;impo ...
随机推荐
- MLT的学习理解
MLT的学习理解 MLT是一个开源的多媒体库,我们的音视频编辑工具,是使用它作为底层支持,某司的'快剪辑'pc版和安卓版,也是用的它. MLT简介 它的GitHub地址,这个库比较老了,现在只有一个作 ...
- Ubuntu16.04 下 python 3.6 安装以及各版本python切换(同时解决各种依赖缺失)
有些博客给出了从源代码通过./configure.make.sudo make 会导致安装玩之后出现各种依赖缺失的问题,如_sqlite3._bz2 等问题. 当然也有很多帖子给出了从系统自带的pyt ...
- FlexPaper 里的pdf2json.exe 下载地址
在使用FlexPaper 做在线阅读,需要使用到pdf2json.exe,将PDF转成JSON或者XML格式,网上很少下载的,现在提供一个下载的地址 http://pan.baidu.com/s/1i ...
- PL/SQL轻量版(二)——基本语法
一.流程控制 1.条件判断 语法: IF <布尔表达式> THEN PL/SQL 和 SQL语句 END IF; IF <布尔表达式> THEN PL/SQL 和 SQL语句 ...
- 20155218 2006-2007-2 《Java程序设计》第3周学习总结
20155218 2006-2007-2 <Java程序设计>第3周学习总结 教材学习内容总结 ==使用在比较两个参考名称是否参考同一对象:equals()比较实质是否相同. 看见new关 ...
- 20155235 2006-2007-2 《Java程序设计》第1周学习总结
20155235 2006-2007-2 <Java程序设计>第1周学习总结 教材学习内容总结 第二章 使用的JRE不同,对JAVA的执行有什么影响 第三章 字符串的用法在JAVA和C中有 ...
- win10 64位redis的安装和测试
步骤记录: 1.官网没有redis64位的版本,在git开源项目上找到64位的可用版本 https://www.cnblogs.com/tommy-huang/p/6093813.html 这里有下载 ...
- Web前端优化常用规则
一,尽量减少HTTP请求 二,使用CDN(内容分发网络) 三,添加Expire/Cache-Control头 四,启用Gzip压缩 五,将CSS放在层叠样式表放到head里面 六,将Script放到页 ...
- Zabbix学习之路(四)之Web监控
1.Zabbix监控web服务器访问性能 zabbix 对 web 性能的监控,通过它可以了解 web 站点的可用性以及性能.最终将各项指标绘制到图形中,这样我们可以了解到一个站点的下载速度.响应速度 ...
- golang 单元测试
单元测试是质量保证十分重要的一环,好的单元测试不仅能及时地发现问题,更能够方便地调试,提高生产效率.所以很多人认为写单元测试是需要额外的时间,会降低生产效率,是对单元测试最大的偏见和误解. go 语言 ...