php barcode_php如何生成条形码方法详解

这篇文章主要介绍了php实现生成code128条形码的方法,结合完整实例形式给出了php条形码生成类的定义与使用方法,需要的朋友可以参考下

本文实例讲述了php实现生成code128条形码的方法。分享给大家供大家参考,具体如下:

效果图:

7c6ac4f301d683f4acb9824aff4a0f87.png

class BarCode128 {

const STARTA = 103;

const STARTB = 104;

const STARTC = 105;

const STOP = 106;

private $unit_width = 1; //单位宽度 缺省1个象素

private $is_set_height = false;

private $width = -1;

private $heith = 35;

private $quiet_zone = 6;

private $font_height = 15;

private $font_type = 4;

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($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, 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;$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

{

imagechar($this->image,$this->font_type,6*$this->unit_width +$t_sx +$i*$t_x,0,$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/

c739f059aa27d8072e676bbba5f83e8d.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值