本文实例讲述了PHP实现生成code128条形码的方法。分享给大家供大家参考,具体如下:
效果图:
PHP;">
self::STARTA,'B'=>self::STARTB,'C'=>self::STARTC);
private $code ='';
private $bin_code ='';
private $text ='';
public function __construct($code='',$text='',$type='B')
{
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);
}
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;$icode);$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($image_type ='png',$file_name=null)
{
$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,$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;$ibin_code);$i++)
{
$ex = $sx + $this->unit_width*(int) $this->bin_code{$i} -1;
if ($i%2==0)
ImageFilledRectangle($this->image,$sx,$sy,$ex,$ey,$this->color);
$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,$this->text{$i},$this->color);
}
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('88888888');
$barcode->createBarCode();
?>
附加一个强大的条码生成扩展包: http://www.barcodebakery.com/
PS:这里再为大家推荐一款相似的条形码生成工具供大家参考使用:
在线条形码(一维码)生成/实时预览工具:
更多关于PHP相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》及《》
希望本文所述对大家PHP程序设计有所帮助。
原文链接:https://www.f2er.com/php/17131.html