芝麻web文件管理V1.00
编辑当前文件:/home/strato/chroot/opt/RZphp80/includes/Image/Barcode/upca.php
* @author Didier Fournout
* @copyright 2005 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 * @version CVS: $Id$ * @link http://pear.php.net/package/Image_Barcode */ require_once 'Image/Barcode.php'; /** * Image_Barcode_upca class * * Package which provides a method to create UPC-A barcode using GD library. * * Slightly Modified ean13.php to get upca.php I needed a way to print * UPC-A bar codes on a PHP page. The Image_Barcode class seemed like * the best way to do it, so I modified ean13 to print in the UPC-A format. * Checked the bar code tables against some documentation below (no errors) * and validated the changes with my trusty cue-cat. * http://www.indiana.edu/~atmat/units/barcodes/bar_t4.htm * * @category Image * @package Image_Barcode * @author Jeffrey K. Brown
* @author Didier Fournout
* @copyright 2005 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 * @version Release: @package_version@ * @link http://pear.php.net/package/Image_Barcode */ class Image_Barcode_upca extends Image_Barcode { /** * Barcode type * @var string */ var $_type = 'upca'; /** * Barcode height * * @var integer */ var $_barcodeheight = 50; /** * Font use to display text * * @var integer */ var $_font = 2; // gd internal small font /** * Bar width * * @var integer */ var $_barwidth = 1; /** * Number set * @var array */ var $_number_set = array( '0' => array( 'L' => array(0,0,0,1,1,0,1), 'R' => array(1,1,1,0,0,1,0) ), '1' => array( 'L' => array(0,0,1,1,0,0,1), 'R' => array(1,1,0,0,1,1,0) ), '2' => array( 'L' => array(0,0,1,0,0,1,1), 'R' => array(1,1,0,1,1,0,0) ), '3' => array( 'L' => array(0,1,1,1,1,0,1), 'R' => array(1,0,0,0,0,1,0) ), '4' => array( 'L' => array(0,1,0,0,0,1,1), 'R' => array(1,0,1,1,1,0,0) ), '5' => array( 'L' => array(0,1,1,0,0,0,1), 'R' => array(1,0,0,1,1,1,0) ), '6' => array( 'L' => array(0,1,0,1,1,1,1), 'R' => array(1,0,1,0,0,0,0) ), '7' => array( 'L' => array(0,1,1,1,0,1,1), 'R' => array(1,0,0,0,1,0,0) ), '8' => array( 'L' => array(0,1,1,0,1,1,1), 'R' => array(1,0,0,1,0,0,0) ), '9' => array( 'L' => array(0,0,0,1,0,1,1), 'R' => array(1,1,1,0,1,0,0) ) ); /** * Draws a UPC-A image barcode * * @param string $text A text that should be in the image barcode * @param string $imgtype The image type that will be generated * * @return image The corresponding Interleaved 2 of 5 image barcode * * @access public * * @author Jeffrey K. Brown
* @author Didier Fournout
* */ function &draw($text, $imgtype = 'png') { $error = false; if ((is_numeric($text)==false) || (strlen($text)!=12)) { $barcodewidth= (12 * 7 * $this->_barwidth) + 3 + 5 + 3 + 2 * (imagefontwidth($this->_font)+1); $error = true; } else { // Calculate the barcode width $barcodewidth = (strlen($text)) * (7 * $this->_barwidth) + 3 // left + 5 // center + 3 // right + imagefontwidth($this->_font)+1 + imagefontwidth($this->_font)+1 // check digit's padding ; } $barcodelongheight = (int) (imagefontheight($this->_font)/2)+$this->_barcodeheight; // Create the image $img = ImageCreate($barcodewidth, $barcodelongheight+ imagefontheight($this->_font)+1); // Alocate the black and white colors $black = ImageColorAllocate($img, 0, 0, 0); $white = ImageColorAllocate($img, 255, 255, 255); // Fill image with white color imagefill($img, 0, 0, $white); if ($error) { $imgerror = ImageCreate($barcodewidth, $barcodelongheight+imagefontheight($this->_font)+1); $red = ImageColorAllocate($imgerror, 255, 0, 0); $black = ImageColorAllocate($imgerror, 0, 0, 0); imagefill($imgerror, 0, 0, $red); imagestring( $imgerror, $this->_font, $barcodewidth / 2 - (10/2 * imagefontwidth($this->_font)), $this->_barcodeheight / 2, 'Code Error', $black ); } // get the first digit which is the key for creating the first 6 bars $key = substr($text,0,1); // Initiate x position $xpos = 0; // print first digit imagestring($img, $this->_font, $xpos, $this->_barcodeheight, $key, $black); $xpos= imagefontwidth($this->_font) + 1; // Draws the left guard pattern (bar-space-bar) // bar imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black); $xpos += $this->_barwidth; // space $xpos += $this->_barwidth; // bar imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black); $xpos += $this->_barwidth; foreach ($this->_number_set[$key]['L'] as $bar) { if ($bar) { imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black); } $xpos += $this->_barwidth; } // Draw left $text contents for ($idx = 1; $idx < 6; $idx ++) { $value=substr($text,$idx,1); imagestring ($img, $this->_font, $xpos+1, $this->_barcodeheight, $value, $black); foreach ($this->_number_set[$value]['L'] as $bar) { if ($bar) { imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $this->_barcodeheight, $black); } $xpos += $this->_barwidth; } } // Draws the center pattern (space-bar-space-bar-space) // space $xpos += $this->_barwidth; // bar imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black); $xpos += $this->_barwidth; // space $xpos += $this->_barwidth; // bar imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black); $xpos += $this->_barwidth; // space $xpos += $this->_barwidth; // Draw right $text contents for ($idx = 6; $idx < 11; $idx ++) { $value=substr($text,$idx,1); imagestring ($img, $this->_font, $xpos+1, $this->_barcodeheight, $value, $black); foreach ($this->_number_set[$value]['R'] as $bar) { if ($bar) { imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $this->_barcodeheight, $black); } $xpos += $this->_barwidth; } } $value = substr($text,11,1); foreach ($this->_number_set[$value]['R'] as $bar) { if ($bar) { imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black); } $xpos += $this->_barwidth; } // Draws the right guard pattern (bar-space-bar) // bar imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black); $xpos += $this->_barwidth; // space $xpos += $this->_barwidth; // bar imagefilledrectangle($img, $xpos, 0, $xpos + $this->_barwidth - 1, $barcodelongheight, $black); $xpos += $this->_barwidth; // Print Check Digit imagestring($img, $this->_font, $xpos+1, $this->_barcodeheight, $value, $black); if ($error) { return $imgerror; } else { return $img; } } // function create } // class ?>