home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Servidores / xampp-win32-1.6.7-installer.exe / php / PEAR / Image / Barcode / ean13.php < prev    next >
Encoding:
PHP Script  |  2008-07-02  |  8.6 KB  |  255 lines

  1. <?php
  2. /* vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4: */
  3.  
  4. /**
  5.  * Image_Barcode_ean13 class
  6.  *
  7.  * Renders EAN 13 barcodes
  8.  *
  9.  * PHP versions 4
  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_Barcode
  19.  * @author     Didier Fournout <didier.fournout@nyc.fr>
  20.  * @copyright  2005 The PHP Group
  21.  * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
  22.  * @version    CVS: $Id: ean13.php,v 1.4 2006/12/13 19:29:30 cweiske Exp $
  23.  * @link       http://pear.php.net/package/Image_Barcode
  24.  */
  25.  
  26. require_once 'Image/Barcode.php';
  27.  
  28. /**
  29.  * Image_Barcode_ean13 class
  30.  *
  31.  * Package which provides a method to create EAN 13 barcode using GD library.
  32.  *
  33.  * @category   Image
  34.  * @package    Image_Barcode
  35.  * @author     Didier Fournout <didier.fournout@nyc.fr>
  36.  * @copyright  2005 The PHP Group
  37.  * @license    http://www.php.net/license/3_0.txt  PHP License 3.0
  38.  * @version    Release: @package_version@
  39.  * @link       http://pear.php.net/package/Image_Barcode
  40.  * @since      Image_Barcode 0.4
  41.  */
  42. class Image_Barcode_ean13 extends Image_Barcode
  43. {
  44.     /**
  45.      * Barcode type
  46.      * @var string
  47.      */
  48.     var $_type = 'ean13';
  49.  
  50.     /**
  51.      * Barcode height
  52.      *
  53.      * @var integer
  54.      */
  55.     var $_barcodeheight = 50;
  56.  
  57.     /**
  58.      * Font use to display text
  59.      *
  60.      * @var integer
  61.      */
  62.     var $_font = 2;  // gd internal small font
  63.  
  64.     /**
  65.      * Bar width
  66.      *
  67.      * @var integer
  68.      */
  69.     var $_barwidth = 1;
  70.  
  71.  
  72.     /**
  73.      * Number set
  74.      * @var array
  75.      */
  76.     var $_number_set = array(
  77.            '0' => array(
  78.                     'A' => array(0,0,0,1,1,0,1),
  79.                     'B' => array(0,1,0,0,1,1,1),
  80.                     'C' => array(1,1,1,0,0,1,0)
  81.                         ),
  82.            '1' => array(
  83.                     'A' => array(0,0,1,1,0,0,1),
  84.                     'B' => array(0,1,1,0,0,1,1),
  85.                     'C' => array(1,1,0,0,1,1,0)
  86.                         ),
  87.            '2' => array(
  88.                     'A' => array(0,0,1,0,0,1,1),
  89.                     'B' => array(0,0,1,1,0,1,1),
  90.                     'C' => array(1,1,0,1,1,0,0)
  91.                         ),
  92.            '3' => array(
  93.                     'A' => array(0,1,1,1,1,0,1),
  94.                     'B' => array(0,1,0,0,0,0,1),
  95.                     'C' => array(1,0,0,0,0,1,0)
  96.                         ),
  97.            '4' => array(
  98.                     'A' => array(0,1,0,0,0,1,1),
  99.                     'B' => array(0,0,1,1,1,0,1),
  100.                     'C' => array(1,0,1,1,1,0,0)
  101.                         ),
  102.            '5' => array(
  103.                     'A' => array(0,1,1,0,0,0,1),
  104.                     'B' => array(0,1,1,1,0,0,1),
  105.                     'C' => array(1,0,0,1,1,1,0)
  106.                         ),
  107.            '6' => array(
  108.                     'A' => array(0,1,0,1,1,1,1),
  109.                     'B' => array(0,0,0,0,1,0,1),
  110.                     'C' => array(1,0,1,0,0,0,0)
  111.                         ),
  112.            '7' => array(
  113.                     'A' => array(0,1,1,1,0,1,1),
  114.                     'B' => array(0,0,1,0,0,0,1),
  115.                     'C' => array(1,0,0,0,1,0,0)
  116.                         ),
  117.            '8' => array(
  118.                     'A' => array(0,1,1,0,1,1,1),
  119.                     'B' => array(0,0,0,1,0,0,1),
  120.                     'C' => array(1,0,0,1,0,0,0)
  121.                         ),
  122.            '9' => array(
  123.                     'A' => array(0,0,0,1,0,1,1),
  124.                     'B' => array(0,0,1,0,1,1,1),
  125.                     'C' => array(1,1,1,0,1,0,0)
  126.                         )
  127.         );
  128.  
  129.     var $_number_set_left_coding = array(
  130.            '0' => array('A','A','A','A','A','A'),
  131.            '1' => array('A','A','B','A','B','B'),
  132.            '2' => array('A','A','B','B','A','B'),
  133.            '3' => array('A','A','B','B','B','A'),
  134.            '4' => array('A','B','A','A','B','B'),
  135.            '5' => array('A','B','B','A','A','B'),
  136.            '6' => array('A','B','B','B','A','A'),
  137.            '7' => array('A','B','A','B','A','B'),
  138.            '8' => array('A','B','A','B','B','A'),
  139.            '9' => array('A','B','B','A','B','A')
  140.         );
  141.  
  142.     /**
  143.      * Draws a EAN 13 image barcode
  144.      *
  145.      * @param  string $text     A text that should be in the image barcode
  146.      * @param  string $imgtype  The image type that will be generated
  147.      *
  148.      * @return image            The corresponding Interleaved 2 of 5 image barcode
  149.      *
  150.      * @access public
  151.      *
  152.      * @author     Didier Fournout <didier.fournout@nyc.fr>
  153.      * @todo       Check if $text is number and len=13
  154.      *
  155.      */
  156.     function &draw($text, $imgtype = 'png')
  157.     {
  158.         // Calculate the barcode width
  159.         $barcodewidth = (strlen($text)) * (7 * $this->_barwidth)
  160.             + 3 // left
  161.             + 5 // center
  162.             + 3 // right
  163.             + imagefontwidth($this->_font)+1
  164.             ;
  165.  
  166.         $barcodelongheight = (int) (imagefontheight($this->_font)/2) + $this->_barcodeheight;
  167.  
  168.         // Create the image
  169.         $img = ImageCreate(
  170.                     $barcodewidth,
  171.                     $barcodelongheight + imagefontheight($this->_font) + 1
  172.                 );
  173.  
  174.         // Alocate the black and white colors
  175.         $black = ImageColorAllocate($img, 0, 0, 0);
  176.         $white = ImageColorAllocate($img, 255, 255, 255);
  177.  
  178.         // Fill image with white color
  179.         imagefill($img, 0, 0, $white);
  180.  
  181.         // get the first digit which is the key for creating the first 6 bars
  182.         $key = substr($text,0,1);
  183.  
  184.         // Initiate x position
  185.         $xpos = 0;
  186.  
  187.         // print first digit
  188.         imagestring($img, $this->_font, $xpos, $this->_barcodeheight, $key, $black);
  189.         $xpos= imagefontwidth($this->_font) + 1;
  190.  
  191.         // Draws the left guard pattern (bar-space-bar)
  192.         // bar
  193.         imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black);
  194.         $xpos += $this->_barwidth;
  195.         // space
  196.         $xpos += $this->_barwidth;
  197.         // bar
  198.         imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black);
  199.         $xpos += $this->_barwidth;
  200.  
  201.         // Draw left $text contents
  202.         $set_array=$this->_number_set_left_coding[$key];
  203.         for ($idx = 1; $idx < 7; $idx ++) {
  204.             $value=substr($text,$idx,1);
  205.             imagestring ($img, $this->_font, $xpos+1, $this->_barcodeheight, $value, $black);
  206.             foreach ($this->_number_set[$value][$set_array[$idx-1]] as $bar) {
  207.                 if ($bar) {
  208.                     imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $this->_barcodeheight, $black);
  209.                 }
  210.                 $xpos += $this->_barwidth;
  211.             }
  212.         }
  213.  
  214.         // Draws the center pattern (space-bar-space-bar-space)
  215.         // space
  216.         $xpos += $this->_barwidth;
  217.         // bar
  218.         imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black);
  219.         $xpos += $this->_barwidth;
  220.         // space
  221.         $xpos += $this->_barwidth;
  222.         // bar
  223.         imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black);
  224.         $xpos += $this->_barwidth;
  225.         // space
  226.         $xpos += $this->_barwidth;
  227.  
  228.  
  229.         // Draw right $text contents
  230.         for ($idx = 7; $idx < 13; $idx ++) {
  231.             $value=substr($text,$idx,1);
  232.             imagestring ($img, $this->_font, $xpos+1, $this->_barcodeheight, $value, $black);
  233.             foreach ($this->_number_set[$value]['C'] as $bar) {
  234.                 if ($bar) {
  235.                     imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $this->_barcodeheight, $black);
  236.                 }
  237.                 $xpos += $this->_barwidth;
  238.             }
  239.         }
  240.  
  241.         // Draws the right guard pattern (bar-space-bar)
  242.         // bar
  243.         imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black);
  244.         $xpos += $this->_barwidth;
  245.         // space
  246.         $xpos += $this->_barwidth;
  247.         // bar
  248.         imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black);
  249.         $xpos += $this->_barwidth;
  250.  
  251.         return $img;
  252.     } // function create
  253.  
  254. } // class
  255. ?>