php生成code128条形码
效果图:
<?php <br />
<br>
class BarCode128 {<br>
const STARTA = 103;<br>
const STARTB = 104;<br>
const STARTC = 105;<br>
const STOP = 106;<br>
private $unit_width = 1; //单位宽度 缺省1个象素<br>
private $is_set_height = false;<br>
private $width = -1;<br>
private $heith = 35;<br>
private $quiet_zone = 6;<br>
private $font_height = 15;<br>
private $font_type = 4;<br>
private $color =0x000000;<br>
private $bgcolor =0xFFFFFF;<br>
private $image = null;<br>
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");<br>
private $valid_code = -1;<br>
private $type ='B';<br>
private $start_codes =array('A'=>self::STARTA,'B'=>self::STARTB,'C'=>self::STARTC);<br>
private $code ='';<br>
private $bin_code ='';<br>
private $text ='';<br>
<br>
public function __construct($code='',$text='',$type='B')<br>
{<br>
if (in_array($type,array('A','B','C')))<br>
$this->setType($type);<br>
else<br>
$this->setType('B');<br>
if ($code !=='')<br>
$this->setCode($code);<br>
if ($text !=='')<br>
$this->setText($text);<br>
}<br>
public function setUnitWidth($unit_width)<br>
{<br>
$this->unit_width = $unit_width;<br>
$this->quiet_zone = $this->unit_width*6;<br>
$this->font_height = $this->unit_width*15;<br>
if (!$this->is_set_height)<br>
{<br>
$this->heith = $this->unit_width*35;<br>
}<br>
}<br>
public function setFontType($font_type)<br>
{<br>
$this->font_type = $font_type;<br>
}<br>
public function setBgcolor($bgcoloe)<br>
{<br>
$this->bgcolor = $bgcoloe;<br>
}<br>
public function setColor($color)<br>
{<br>
$this->color = $color;<br>
}<br>
public function setCode($code)<br>
{<br>
if ($code !='')<br>
{<br>
$this->code= $code;<br>
if ($this->text ==='')<br>
$this->text = $code;<br>
}<br>
}<br>
public function setText($text)<br>
{<br>
$this->text = $text;<br>
}<br>
<br>
public function setType($type)<br>
{<br>
$this->type = $type;<br>
}<br>
public function setHeight($height)<br>
{<br>
$this->height = $height;<br>
$this->is_set_height = true;<br>
}<br>
<br>
private function getValueFromChar($ch)<br>
{<br>
$val = ord($ch);<br>
try<br>
{<br>
if ($this->type =='A')<br>
{<br>
if ($val > 95)<br>
throw new Exception(' illegal barcode character '.$ch.' for code128A in '.__FILE__.' on line '.__LINE__);<br>
if ($val
$val += 64;<br>
else<br>
$val -=32;<br>
}<br>
elseif ($this->type =='B')<br>
{<br>
if ($val 127)<br>
throw new Exception(' illegal barcode character '.$ch.' for code128B in '.__FILE__.' on line '.__LINE__);<br>
else<br>
$val -=32;<br>
}<br>
else<br>
{<br>
if (!is_numeric($ch) || (int)$ch 99)<br>
throw new Exception(' illegal barcode character '.$ch.' for code128C in '.__FILE__.' on line '.__LINE__);<br>
else<br>
{<br>
if (strlen($ch) ==1)<br>
$ch .='0';<br>
$val = (int)($ch);<br>
}<br>
}<br>
}<br>
catch(Exception $ex)<br>
{<br>
errorlog('die',$ex->getMessage());<br>
}<br>
return $val;<br>
}<br>
private function parseCode()<br>
{<br>
$this->type=='C'?$step=2:$step=1;<br>
$val_sum = $this->start_codes[$this->type];<br>
$this->width = 35;<br>
$this->bin_code = $this->codes[$val_sum];<br>
for($i =0;$i<strlen>code);$i+=$step)<br>
{<br>
$this->width +=11;<br>
$ch = substr($this->code,$i,$step);<br>
$val = $this->getValueFromChar($ch);<br>
$val_sum += $val;<br>
$this->bin_code .= $this->codes[$val];<br>
}<br>
$this->width *=$this->unit_width;<br>
$val_sum = $val_sum%103;<br>
$this->valid_code = $val_sum;<br>
$this->bin_code .= $this->codes[$this->valid_code];<br>
$this->bin_code .= $this->codes[self::STOP];<br>
}<br>
public function getValidCode()<br>
{<br>
if ($this->valid_code == -1)<br>
$this->parseCode();<br>
return $this->valid_code;<br>
}<br>
public function getWidth()<br>
{<br>
if ($this->width ==-1)<br>
$this->parseCode();<br>
return $this->width;<br>
}<br>
<br>
public function getHeight()<br>
{<br>
if ($this->width ==-1)<br>
$this->parseCode();<br>
return $this->height;<br>
}<br>
<br>
public function createBarCode($image_type ='png',$file_name=null)<br>
{<br>
$this->parseCode();<br>
$this->image = ImageCreate($this->width+2*$this->quiet_zone,$this->heith + $this->font_height);<br>
$this->bgcolor = imagecolorallocate($this->image,$this->bgcolor >> 16,($this->bgcolor >> 8)&0x00FF,$this->bgcolor & 0xFF);<br>
$this->color = imagecolorallocate($this->image,$this->color >> 16,($this->color >> 8)&0x00FF,$this->color & 0xFF);<br>
ImageFilledRectangle($this->image, 0, 0, $this->width + 2*$this->quiet_zone,$this->heith + $this->font_height, $this->bgcolor);<br>
$sx = $this->quiet_zone;<br>
$sy = $this->font_height -1;<br>
$fw = 10; //編號為2或3的字體的寬度為10,為4或5的字體寬度為11<br>
if ($this->font_type >3)<br>
{<br>
$sy++;<br>
$fw=11;<br>
}<br>
$ex = 0;<br>
$ey = $this->heith + $this->font_height - 2;<br>
for($i=0;$i<strlen>bin_code);$i++)<br>
{<br>
$ex = $sx + $this->unit_width*(int) $this->bin_code{$i} -1;<br>
if ($i%2==0)<br>
ImageFilledRectangle($this->image, $sx, $sy, $ex,$ey, $this->color);<br>
$sx =$ex + 1;<br>
}<br>
$t_num = strlen($this->text);<br>
$t_x = $this->width/$t_num;<br>
$t_sx = ($t_x -$fw)/2; //目的为了使文字居中平均分布<br>
for($i=0;$i
{<br>
imagechar($this->image,$this->font_type,6*$this->unit_width +$t_sx +$i*$t_x,0,$this->text{$i},$this->color);<br>
}<br>
if (!$file_name)<br>
{<br>
header("Content-Type: image/".$image_type);<br>
}<br>
switch ($image_type)<br>
{<br>
case 'jpg':<br>
case 'jpeg':<br>
Imagejpeg($this->image,$file_name);<br>
break;<br>
case 'png':<br>
Imagepng($this->image,$file_name);<br>
break;<br>
case 'gif':<br>
break;<br>
Imagegif($this->image,$file_name);<br>
default:<br>
Imagepng($this->image,$file_name);<br>
break;<br>
}<br>
}<br>
}<br>
<br>
$barcode = new BarCode128('88888888');<br>
$barcode->createBarCode();<br>
?></strlen></strlen>
附加一个强大的条码生成扩展包
http://www.barcodebakery.com/
">
http://www.barcodebakery.com/
AD:真正免费,域名+虚机+企业邮箱=0元