Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php/* vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4: *//*** Image_Barcode_Code39 class** Image_Barcode_Code39 creates Code 3 of 9 ( Code39 ) barcode images. It's* implementation borrows heavily for the perl module GD::Barcode::Code39** PHP versions 4** LICENSE: This source file is subject to version 3.0 of the PHP license* that is available through the world-wide-web at the following URI:* http://www.php.net/license/3_0.txt. If you did not receive a copy of* the PHP License and are unable to obtain it through the web, please* send a note to license@php.net so we can mail you a copy immediately.** @category Image* @package Image_Barcode* @author Ryan Briones <ryanbriones@webxdesign.org>* @copyright 2005 The PHP Group* @license http://www.php.net/license/3_0.txt PHP License 3.0* @version CVS: $Id: Code39.php 304741 2010-10-25 09:14:17Z clockwerx $* @link http://pear.php.net/package/Image_Barcode*/require_once "Image/Barcode.php";if (!function_exists('str_split')) {require_once 'PHP/Compat.php';PHP_Compat::loadFunction('str_split');}/*** Image_Barcode_Code39 class** Package which provides a method to create Code39 using GD library.** @category Image* @package Image_Barcode* @author Ryan Briones <ryanbriones@webxdesign.org>* @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* @since Image_Barcode 0.5*/class Image_Barcode_Code39 extends Image_Barcode{/*** Barcode type* @var string*/var $_type = 'Code39';/*** Barcode height** @var integer*/var $_barcodeheight = 50;/*** Bar thin width** @var integer*/var $_barthinwidth = 1;/*** Bar thick width** @var integer*/var $_barthickwidth = 3;/*** Coding map* @var array*/var $_coding_map = array('0' => '000110100','1' => '100100001','2' => '001100001','3' => '101100000','4' => '000110001','5' => '100110000','6' => '001110000','7' => '000100101','8' => '100100100','9' => '001100100','A' => '100001001','B' => '001001001','C' => '101001000','D' => '000011001','E' => '100011000','F' => '001011000','G' => '000001101','H' => '100001100','I' => '001001100','J' => '000011100','K' => '100000011','L' => '001000011','M' => '101000010','N' => '000010011','O' => '100010010','P' => '001010010','Q' => '000000111','R' => '100000110','S' => '001000110','T' => '000010110','U' => '110000001','V' => '011000001','W' => '111000000','X' => '010010001','Y' => '110010000','Z' => '011010000','-' => '010000101','*' => '010010100','+' => '010001010','$' => '010101000','%' => '000101010','/' => '010100010','.' => '110000100',' ' => '011000100');/*** Constructor** @param string $text A text that should be in the image barcode* @param int $wThin Width of the thin lines on the barcode* @param int $wThick Width of the thick lines on the barcode** @author Ryan Briones <ryanbriones@webxdesign.org>**/function Image_Barcode_Code39( $text = '', $wThin = 0, $wThick = 0 ){// Check $text for invalid charactersif ( $this->checkInvalid( $text ) ) {return false;}$this->text = $text;if ( $wThin > 0 ) $this->_barthinwidth = $wThin;if ( $wThick > 0 ) $this->_barthickwidth = $wThick;return true;}/*** Make an image resource using the GD image library** @param bool $noText Set to true if you'd like your barcode to be sans text* @param int $bHeight height of the barcode image including text* @return resource The Barcode Image (TM)** @author Ryan Briones <ryanbriones@webxdesign.org>**/function plot($noText = false, $bHeight = 0){// add start and stop * characters$final_text = '*' . $this->text . '*';if ( $bHeight > 0 ) {$this->_barcodeheight = $bHeight;}$barcode = '';foreach ( str_split( $final_text ) as $character ) {$barcode .= $this->_dumpCode( $this->_coding_map[$character] . '0' );}$barcode_len = strlen( $barcode );// Create GD image object$img = imagecreate( $barcode_len, $this->_barcodeheight );// Allocate black and white colors to the image$black = imagecolorallocate( $img, 0, 0, 0 );$white = imagecolorallocate( $img, 255, 255, 255 );$font_height = ( $noText ? 0 : imagefontheight( "gdFontSmall" ) );$font_width = imagefontwidth( "gdFontSmall" );// fill background with white colorimagefill( $img, 0, 0, $white );// Initialize X position$xpos = 0;// draw barcode bars to imageif ( $noText ) {foreach (str_split($barcode) as $character_code ) {if ($character_code == 0 ) {imageline($img, $xpos, 0, $xpos, $this->_barcodeheight, $white);} else {imageline($img, $xpos, 0, $xpos, $this->_barcodeheight, $black);}$xpos++;}} else {foreach (str_split($barcode) as $character_code ) {if ($character_code == 0) {imageline($img, $xpos, 0, $xpos, $this->_barcodeheight - $font_height - 1, $white);} else {imageline($img, $xpos, 0, $xpos, $this->_barcodeheight - $font_height - 1, $black);}$xpos++;}// draw text under barcodeimagestring($img,'gdFontSmall',( $barcode_len - $font_width * strlen( $this->text ) )/2,$this->_barcodeheight - $font_height,$this->text,$black);}return $img;}/*** Send image to the browser; for Image_Barcode compaitbility** @param string $text* @param string $imgtype Image type; accepts jpg, png, and gif, but gif only works if you've payed for licensing* @param bool $noText Set to true if you'd like your barcode to be sans text* @param int $bHeight height of the barcode image including text* @return gd_image GD image object** @author Ryan Briones <ryanbriones@webxdesign.org>**/function &draw($text, $imgtype = 'png', $noText = false, $bHeight = 0){// Check $text for invalid charactersif ($this->checkInvalid($text)) {return PEAR::raiseError('Invalid text');}$this->text = $text;$img = &$this->plot($noText, $bHeight);return $img;}/*** _dumpCode is a PHP implementation of dumpCode from the Perl module* GD::Barcode::Code39. I royally screwed up when trying to do the thing* my own way the first time. This way works.** @param string $code Code39 barcode code* @return string $result barcode line code** @access private** @author Ryan Briones <ryanbriones@webxdesign.org>***/function _dumpCode($code){$result = '';$color = 1; // 1: Black, 0: White// if $bit is 1, line is wide; if $bit is 0 line is thinforeach ( str_split( $code ) as $bit ) {$result .= ( ( $bit == 1 ) ? str_repeat( "$color", $this->_barthickwidth ) : str_repeat( "$color", $this->_barthinwidth ) );$color = ( ( $color == 0 ) ? 1 : 0 );}return $result;}/*** Check for invalid characters** @param string $text text to be ckecked* @return bool returns true when invalid characters have been found** @author Ryan Briones <ryanbriones@webxdesign.org>**/function checkInvalid($text){return preg_match( "/[^0-9A-Z\-*+\$%\/. ]/", $text );}}?>