Beispiel #1
0
 /**
  * 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;
 }
Beispiel #2
0
    /**
     * 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
        );
    }