/** * Renderer Constructor * * @param mixed $renderer String name of renderer class, or Zend_Config object. * @param mixed $rendererConfig OPTIONAL; an array or Zend_Config object with renderer parameters. * @return Zend_Barcode_Renderer */ public static function makeRenderer($renderer = 'image', $rendererConfig = array()) { if ($renderer instanceof Zend_Barcode_Renderer_RendererAbstract) { return $renderer; } /* * Convert Zend_Config argument to plain string * barcode name and separate config object. */ if ($renderer instanceof Zend_Config) { if (isset($renderer->rendererParams)) { $rendererConfig = $renderer->rendererParams->toArray(); } if (isset($renderer->renderer)) { $renderer = (string) $renderer->renderer; } } if ($rendererConfig instanceof Zend_Config) { $rendererConfig = $rendererConfig->toArray(); } /* * Verify that barcode parameters are in an array. */ if (!is_array($rendererConfig)) { /** * @see Zend_Barcode_Exception */ // require_once 'Zend/Barcode/Exception.php'; $e = new Zend_Barcode_Exception('Barcode parameters must be in an array or a Zend_Config object'); $e->setIsRenderable(false); throw $e; } /* * Verify that an barcode name has been specified. */ if (!is_string($renderer) || empty($renderer)) { /** * @see Zend_Barcode_Exception */ // require_once 'Zend/Barcode/Exception.php'; $e = new Zend_Barcode_Exception('Renderer name must be specified in a string'); $e->setIsRenderable(false); throw $e; } /* * Form full barcode class name */ $rendererNamespace = 'Zend_Barcode_Renderer'; if (isset($rendererConfig['rendererNamespace'])) { $rendererNamespace = $rendererConfig['rendererNamespace']; } $rendererName = strtolower($rendererNamespace . '_' . $renderer); $rendererName = str_replace(' ', '_', ucwords(str_replace('_', ' ', $rendererName))); /* * Load the barcode class. This throws an exception * if the specified class cannot be loaded. */ if (!class_exists($rendererName)) { // require_once 'Zend/Loader.php'; Zend_Loader::loadClass($rendererName); } /* * Create an instance of the barcode class. * Pass the config to the barcode class constructor. */ $rdrAdapter = new $rendererName($rendererConfig); /* * Verify that the object created is a descendent of the abstract barcode type. */ if (!$rdrAdapter instanceof Zend_Barcode_Renderer_RendererAbstract) { /** * @see Zend_Barcode_Exception */ // require_once 'Zend/Barcode/Exception.php'; $e = new Zend_Barcode_Exception("Renderer class '{$rendererName}' does not extend Zend_Barcode_Renderer_RendererAbstract"); $e->setIsRenderable(false); throw $e; } return $rdrAdapter; }
/** * Initialize the image resource * * @return void */ protected function _initRenderer() { if (!extension_loaded('gd')) { // require_once 'Zend/Barcode/Exception.php'; $e = new Zend_Barcode_Exception( 'Gd extension must be loaded to render barcode as image' ); $e->setIsRenderable(false); throw $e; } $barcodeWidth = $this->_barcode->getWidth(true); $barcodeHeight = $this->_barcode->getHeight(true); if ($this->_resource !== null) { $foreColor = $this->_barcode->getForeColor(); $backgroundColor = $this->_barcode->getBackgroundColor(); $this->_imageBackgroundColor = imagecolorallocate( $this->_resource, ($backgroundColor & 0xFF0000) >> 16, ($backgroundColor & 0x00FF00) >> 8, $backgroundColor & 0x0000FF ); $this->_imageForeColor = imagecolorallocate( $this->_resource, ($foreColor & 0xFF0000) >> 16, ($foreColor & 0x00FF00) >> 8, $foreColor & 0x0000FF ); } else { $width = $barcodeWidth; $height = $barcodeHeight; if ($this->_userWidth && $this->_barcode->getType() != 'error') { $width = $this->_userWidth; } if ($this->_userHeight && $this->_barcode->getType() != 'error') { $height = $this->_userHeight; } $foreColor = $this->_barcode->getForeColor(); $backgroundColor = $this->_barcode->getBackgroundColor(); $this->_resource = imagecreatetruecolor($width, $height); $this->_imageBackgroundColor = imagecolorallocate( $this->_resource, ($backgroundColor & 0xFF0000) >> 16, ($backgroundColor & 0x00FF00) >> 8, $backgroundColor & 0x0000FF ); $this->_imageForeColor = imagecolorallocate( $this->_resource, ($foreColor & 0xFF0000) >> 16, ($foreColor & 0x00FF00) >> 8, $foreColor & 0x0000FF ); $white = imagecolorallocate($this->_resource, 255, 255, 255); imagefilledrectangle($this->_resource, 0, 0, $width - 1, $height - 1, $white); } $this->_adjustPosition(imagesy($this->_resource), imagesx($this->_resource)); imagefilledrectangle( $this->_resource, $this->_leftOffset, $this->_topOffset, $this->_leftOffset + $barcodeWidth - 1, $this->_topOffset + $barcodeHeight - 1, $this->_imageBackgroundColor ); }