Image_Barcode2
[ class tree: Image_Barcode2 ] [ index: Image_Barcode2 ] [ all elements ]

Source for file Int25.php

Documentation is available at Int25.php

  1. <?php
  2. /* vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4: */
  3.  
  4. /**
  5.  * Image_Barcode2_Driver_Int25 class
  6.  *
  7.  * Renders Interleaved 2 of 5 barcodes
  8.  *
  9.  * PHP versions 5
  10.  *
  11.  * LICENSE: This source file is subject to version 3.0 of the PHP license
  12.  * that is available through the world-wide-web at the following URI:
  13.  * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
  14.  * the PHP License and are unable to obtain it through the web, please
  15.  * send a note to license@php.net so we can mail you a copy immediately.
  16.  *
  17.  * @category  Image
  18.  * @package   Image_Barcode2
  19.  * @author    Marcelo Subtil Marcal <msmarcal@php.net>
  20.  * @copyright 2005 The PHP Group
  21.  * @license   http://www.php.net/license/3_0.txt  PHP License 3.0
  22.  * @link      http://pear.php.net/package/Image_Barcode2
  23.  */
  24.  
  25. require_once 'Image/Barcode2/Driver.php';
  26. require_once 'Image/Barcode2/Common.php';
  27. require_once 'Image/Barcode2/DualWidth.php';
  28. require_once 'Image/Barcode2/Exception.php';
  29.  
  30. /**
  31.  * Interleaved 2 of 5
  32.  *
  33.  * Package which provides a method to create Interleaved 2 of 5
  34.  * barcode using GD library.
  35.  *
  36.  * @category  Image
  37.  * @package   Image_Barcode2
  38.  * @author    Marcelo Subtil Marcal <msmarcal@php.net>
  39.  * @copyright 2005 The PHP Group
  40.  * @license   http://www.php.net/license/3_0.txt  PHP License 3.0
  41.  * @version   Release: @package_version@
  42.  * @link      http://pear.php.net/package/Image_Barcode2
  43.  */
  44. {
  45.     /**
  46.      * Coding map
  47.      * @var array 
  48.      */
  49.     private $_codingmap = array(
  50.         '0' => '00110',
  51.         '1' => '10001',
  52.         '2' => '01001',
  53.         '3' => '11000',
  54.         '4' => '00101',
  55.         '5' => '10100',
  56.         '6' => '01100',
  57.         '7' => '00011',
  58.         '8' => '10010',
  59.         '9' => '01010'
  60.     );
  61.  
  62.     /**
  63.      * Class constructor
  64.      *
  65.      * @param Image_Barcode2_Writer $writer Library to use.
  66.      */
  67.     public function __construct(Image_Barcode2_Writer $writer
  68.     {
  69.         parent::__construct($writer);
  70.         $this->setBarcodeHeight(50);
  71.         $this->setBarcodeWidthThin(1);
  72.         $this->setBarcodeWidthThick(3);
  73.     }
  74.  
  75.  
  76.     /**
  77.      * Validate barcode
  78.      *
  79.      * @return void 
  80.      * @throws Image_Barcode2_Exception
  81.      */
  82.     public function validate()
  83.     {
  84.         // Check barcode for invalid characters
  85.         if (!preg_match('/[0-9]/'$this->getBarcode())) {
  86.             throw new Image_Barcode2_Exception('Invalid barcode');
  87.         }
  88.     }
  89.  
  90.  
  91.     /**
  92.      * Draws a Interleaved 2 of 5 image barcode
  93.      *
  94.      * @return resource            The corresponding Interleaved 2 of 5 image barcode
  95.      *
  96.      * @access public
  97.      *
  98.      * @author Marcelo Subtil Marcal <msmarcal@php.net>
  99.      * @since  Image_Barcode2 0.3
  100.      */
  101.     public function draw()
  102.     {
  103.         $text   $this->getBarcode();
  104.         $writer $this->getWriter();
  105.  
  106.         // if odd $text lenght adds a '0' at string beginning
  107.         $text strlen($text% 2 ? '0' $text $text;
  108.  
  109.         // Calculate the barcode width
  110.         $barcodewidth (strlen($text)) 
  111.             * (3 * $this->getBarcodeWidthThin(+ 2 * $this->getBarcodeWidthThick())
  112.             + (strlen($text))
  113.             * 2.5
  114.             + (7 * $this->getBarcodeWidthThin($this->getBarcodeWidthThick()) + 3;
  115.  
  116.         // Create the image
  117.         $img $writer->imagecreate($barcodewidth$this->getBarcodeHeight());
  118.  
  119.         // Alocate the black and white colors
  120.         $black $writer->imagecolorallocate($img000);
  121.         $white $writer->imagecolorallocate($img255255255);
  122.  
  123.         // Fill image with white color
  124.         $writer->imagefill($img00$white);
  125.  
  126.         // Initiate x position
  127.         $xpos = 0;
  128.  
  129.         // Draws the leader
  130.         for ($i = 0; $i < 2; $i++{
  131.             $elementwidth $this->getBarcodeWidthThin();
  132.             $writer->imagefilledrectangle(
  133.                 $img,
  134.                 $xpos,
  135.                 0,
  136.                 $xpos $elementwidth - 1,
  137.                 $this->getBarcodeHeight(),
  138.                 $black
  139.             );
  140.             $xpos += $elementwidth;
  141.             $xpos += $this->getBarcodeWidthThin();
  142.             $xpos ++;
  143.         }
  144.  
  145.         // Draw $text contents
  146.         $all strlen($text);
  147.  
  148.         // Draw 2 chars at a time
  149.         for ($idx = 0; $idx $all$idx += 2{
  150.             $oddchar  substr($text$idx1);
  151.             $evenchar substr($text$idx + 11);
  152.  
  153.             // interleave
  154.             for ($baridx = 0; $baridx < 5; $baridx++{
  155.  
  156.                 // Draws odd char corresponding bar (black)
  157.                 $elementwidth $this->getBarcodeWidthThin();
  158.                 if (substr($this->_codingmap[$oddchar]$baridx1)) {
  159.                     $elementwidth $this->getBarcodeWidthThick();
  160.                 }
  161.  
  162.                 $writer->imagefilledrectangle(
  163.                     $img
  164.                     $xpos
  165.                     0
  166.                     $xpos $elementwidth - 1
  167.                     $this->getBarcodeHeight()
  168.                     $black
  169.                 );
  170.  
  171.                 $xpos += $elementwidth;
  172.  
  173.                 // Left enought space to draw even char (white)
  174.                 $elementwidth $this->getBarcodeWidthThin();
  175.                 if (substr($this->_codingmap[$evenchar]$baridx1)) {
  176.                     $elementwidth $this->getBarcodeWidthThick();
  177.                 }
  178.  
  179.                 $xpos += $elementwidth
  180.                 $xpos ++;
  181.             }
  182.         }
  183.  
  184.  
  185.         // Draws the trailer
  186.         $elementwidth $this->getBarcodeWidthThick();
  187.         $writer->imagefilledrectangle(
  188.             $img
  189.             $xpos
  190.             0
  191.             $xpos $elementwidth - 1,
  192.             $this->getBarcodeHeight()
  193.             $black
  194.         );
  195.         $xpos += $elementwidth;
  196.         $xpos += $this->getBarcodeWidthThin();
  197.         $xpos ++;
  198.         $elementwidth $this->getBarcodeWidthThin();
  199.         $writer->imagefilledrectangle(
  200.             $img,
  201.             $xpos,
  202.             0
  203.             $xpos $elementwidth - 1,
  204.             $this->getBarcodeHeight()
  205.             $black
  206.         );
  207.  
  208.         return $img;
  209.     }
  210.  
  211. // class

Documentation generated on Mon, 25 Feb 2013 13:00:05 +0000 by phpDocumentor 1.4.3. PEAR Logo Copyright © PHP Group 2004.