<?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 生成条形码的更多相关文章

  1. C# 在Word文档中生成条形码

    C# 在Word文档中生成条形码 简介 条形码是由多个不同的空白和黑条按照一定的顺序组成,用于表示各种信息如产品名称.制造商.类别.价格等.目前,条形码在我们的日常生活中有着很广泛的应用,不管是在图书 ...

  2. 使用html2canvas实现批量生成条形码

    /*前台代码*/ <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Generat ...

  3. JAVA生成条形码

    1.下载生成条形码所需要的jar包barcode4j.jar: 2.java生成条形码代码 import java.awt.image.BufferedImage;import java.io.Fil ...

  4. C# 生成条形码

    原文地址:http://www.cnblogs.com/xcsn/p/4514759.html 引用BarcodeLib.dll(百度云中有)生成条形 protected void Button2_C ...

  5. C# 利用BarcodeLib.dll生成条形码(一维,zxing,QrCodeNet/dll二维码)

    原文:http://blog.csdn.net/kongwei521/article/details/17588825 首先效果: 一.下载BarcodeLib.dll 下载地址 :http://do ...

  6. PHP5生成条形码器

    前阵子在做一个商家优惠券的功能,需要用到条形码,于是将资料重新整理下. 1.什么是条形码? 百度百科定义:条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息 ...

  7. PHP生成条形码

    前阵子在做一个商家优惠券的功能,需要用到条形码,于是将资料重新整理下. 1.什么是条形码? 百度百科定义:条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息 ...

  8. C# 利用BarcodeLib.dll生成条形码

    首先效果: 1:首先下载BarcodeLib.dll 下载地址 http://pan.baidu.com/share/link?shareid=2590968386&uk=2148890391 ...

  9. 使用PHP-Barcode轻松生成条形码(一)

    最近由于工作需要,研究了一下PHP如何生成条形码.虽然二维码时下比较流行,但是条形码依然应用广泛,不可替代.园子里有很多讲利用PHP生成条形码的文章,基本上都是围绕Barcode Bakery的,它虽 ...

  10. java 生成条形码

    package com.sun.erwei; import java.awt.image.BufferedImage;import java.io.ByteArrayOutputStream;impo ...

随机推荐

  1. Selenium_python自动化第一个测试案例(代码基本规范)

    发生背景: 最近开始整理Selenium+python自动化测试项目中相关问题,偶然间翻起自己当时学习自动化时候写的脚本,发现我已经快认不出来写的什么鬼流水账了,所以今天特别整理下自动化开发Selen ...

  2. 一道hive面试题:explode map字段

    需要找到每个学生最好的课程和成绩,最差的课程和成绩,以及各科的平均分 文本数据如下: name scores张三 语文:,数学:,英语:,历史:,政治:,物理:,化学:,地理:,生物: 李四 语文:, ...

  3. # 20155337 《Android程序设计》实验四实验报告

    20155337 <Android程序设计>实验四实验报告 实验一 实验内容 Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPU ...

  4. 20145209 实验四 《android开发基础》 实验报告

    20145209 实验四 <android开发基础> 实验报告 实验内容 Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBI ...

  5. WPF Color、String、Brush转换

    原文:WPF Color.String.Brush转换 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/detai ...

  6. MSP430FR6972的串口波特率设置代码

    1. 本次使用ACLK,就是辅助时钟(32.768KHZ)作为串口的时钟源,那么使用波特率9600的时候,分频系数=32768/9600=3.41,所以是有小数位的,设置代码如下 UCA0CTLW0 ...

  7. 【excle基础】如何去掉excel某一列中的字段的空格

    如图所示,想要去掉A列的空格: 查找空格,全部替换

  8. 一个web应用的诞生(12)--再探首页

    就要面对本章的一个难点了,说是难点可能仅仅对于我来说,毕竟我是一个js渣,既然首页打算使用动态加载的形式,那么与后台交互的方式就要进行选择,目前比较流行的为RESTful的形式,关于RESTful的文 ...

  9. win7下配置spark

    1.安装jdk(配置JAVA_HOME,CLASSPATH,path) 2.安装scala(配置SCALA_HOME,path) 3.安装spark Spark的安装非常简单,直接去Download ...

  10. CsvHelper文档-5配置

    CsvHelper文档-5配置 CsvHelper库被设计成快速且简单易用,但是有时候默认的是设置不符合要求,需要你自己改变一些东西.所以csvHelper内置了很多自定义设置选项来改变读写行为.特别 ...