Heim  >  Artikel  >  Backend-Entwicklung  >  Beispielcode-Freigabe zum Generieren von Code128-Barcode in PHP

Beispielcode-Freigabe zum Generieren von Code128-Barcode in PHP

黄舟
黄舟Original
2017-07-20 13:26:162529Durchsuche

Dieser Artikel stellt hauptsächlich die Methode zur Generierung von Code128-Barcodes in PHP vor. Er gibt die Definition und Verwendung der PHP-Barcode-Generierungsklasse in Form eines vollständigen Beispiels an.

Die Beispiele In diesem Artikel wird beschrieben, wie PHP die Methode zum Generieren des Code128-Barcodes implementiert. Teilen Sie es allen als Referenz mit. Die Details lauten wie folgt:

Rendering:


<?php
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 =&#39;B&#39;;
  private $start_codes =array(&#39;A&#39;=>self::STARTA,&#39;B&#39;=>self::STARTB,&#39;C&#39;=>self::STARTC);
  private $code =&#39;&#39;;
  private $bin_code =&#39;&#39;;
  private $text =&#39;&#39;;
  public function __construct($code=&#39;&#39;,$text=&#39;&#39;,$type=&#39;B&#39;)
  {
    if (in_array($type,array(&#39;A&#39;,&#39;B&#39;,&#39;C&#39;)))
      $this->setType($type);
    else
      $this->setType(&#39;B&#39;);
    if ($code !==&#39;&#39;)
      $this->setCode($code);
    if ($text !==&#39;&#39;)
      $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 !=&#39;&#39;)
    {
      $this->code= $code;
      if ($this->text ===&#39;&#39;)
        $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 ==&#39;A&#39;)
      {
        if ($val > 95)
          throw new Exception(&#39; illegal barcode character &#39;.$ch.&#39; for code128A in &#39;.__FILE__.&#39; on line &#39;.__LINE__);
        if ($val < 32)
          $val += 64;
        else
          $val -=32;
      }
      elseif ($this->type ==&#39;B&#39;)
      {
        if ($val < 32 || $val > 127)
          throw new Exception(&#39; illegal barcode character &#39;.$ch.&#39; for code128B in &#39;.__FILE__.&#39; on line &#39;.__LINE__);
        else
          $val -=32;
      }
      else
      {
        if (!is_numeric($ch) || (int)$ch < 0 || (int)($ch) > 99)
          throw new Exception(&#39; illegal barcode character &#39;.$ch.&#39; for code128C in &#39;.__FILE__.&#39; on line &#39;.__LINE__);
        else
        {
          if (strlen($ch) ==1)
            $ch .=&#39;0&#39;;
          $val = (int)($ch);
        }
      }
    }
    catch(Exception $ex)
    {
      errorlog(&#39;die&#39;,$ex->getMessage());
    }
    return $val;
  }
  private function parseCode()
  {
    $this->type==&#39;C&#39;?$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($image_type =&#39;png&#39;,$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;$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, $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,0,$this->text{$i},$this->color);
    }
    if (!$file_name)
    {
      header("Content-Type: image/".$image_type);
    }
    switch ($image_type)
    {
      case &#39;jpg&#39;:
      case &#39;jpeg&#39;:
        Imagejpeg($this->image,$file_name);
        break;
      case &#39;png&#39;:
        Imagepng($this->image,$file_name);
        break;
      case &#39;gif&#39;:
        break;
        Imagegif($this->image,$file_name);
      default:
        Imagepng($this->image,$file_name);
        break;
    }
  }
}
$barcode = new BarCode128(&#39;88888888&#39;);
$barcode->createBarCode();
?>

Anhängen ein leistungsstarkes Erweiterungspaket zur Barcode-Generierung:


Das obige ist der detaillierte Inhalt vonBeispielcode-Freigabe zum Generieren von Code128-Barcode in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn