/** * Creates and caches the given view. * * @param string $view Which view to create. * @param Ansel_Style $style A style object * * @throws Ansel_Exception */ public function createView($view, Ansel_Style $style = null, $watermark = '') { // Default to the gallery's style if (empty($style)) { $style = $GLOBALS['injector']->getInstance('Ansel_Storage')->getGallery($this->gallery)->getStyle(); } // Get the VFS info. $vfspath = $this->getVFSPath($view, $style); if ($GLOBALS['injector']->getInstance('Horde_Core_Factory_Vfs')->create('images')->exists($vfspath, $this->getVFSName($view))) { return; } try { $data = $GLOBALS['injector']->getInstance('Horde_Core_Factory_Vfs')->create('images')->read($this->getVFSPath('full'), $this->getVFSName('full')); } catch (Horde_Vfs_Exception $e) { Horde::log($e, 'ERR'); throw new Ansel_Exception($e); } // Force screen images to ALWAYS be jpegs for performance/size if ($view == 'screen' && $GLOBALS['conf']['image']['type'] != 'jpeg') { $originalType = $this->_image->setType('jpeg'); } else { $originalType = false; } $vHash = $this->getViewHash($view, $style); $this->_image->loadString($data); if ($view == 'thumb') { $viewType = $style->thumbstyle; } else { // Screen, Mini $viewType = ucfirst($view); } try { $iview = Ansel_ImageGenerator::factory($viewType, array('image' => $this, 'style' => $style)); } catch (Ansel_Exception $e) { // It could be we don't support the requested effect, try // ansel_default before giving up. if ($view == 'thumb' && $viewType != 'Thumb') { $iview = Ansel_ImageGenerator::factory('Thumb', array('image' => $this, 'style' => Ansel::getStyleDefinition('ansel_default'))); } else { // If it wasn't a thumb, then something else must be wrong throw $e; } } // generate the view $iview->create(); // Cache the data from the new ImageGenerator try { $this->_data[$vHash] = $this->_image->raw(); } catch (Horde_Image_Exception $e) { throw new Ansel_Exception($e); } // ...and put it in Horde_Image obejct, then save $this->_image->loadString($this->_data[$vHash]); $this->_loaded[$vHash] = true; $GLOBALS['injector']->getInstance('Horde_Core_Factory_Vfs')->create('images')->writeData($vfspath, $this->getVFSName($vHash), $this->_data[$vHash], true); // Watermark if (!empty($watermark)) { $this->watermark($view); // Cache the data again try { $this->_data[$vHash] = $this->_image->raw(); } catch (Horde_Image_Exception $e) { throw new Ansel_Exception($e); } $GLOBALS['injector']->getInstance('Horde_Core_Factory_Vfs')->create('images')->writeData($vfspath, $this->getVFSName($view), $this->_data[$vHash]); } // Revert any type change if ($originalType) { $this->_image->setType($originalType); } }
/** * Set the image type * * @see Horde_Image_Base::setType() */ public function setType($type) { $old = parent::setType($type); try { $this->_imagick->setImageFormat($this->_type); } catch (ImagickException $e) { // Don't care about an empty wand here. } return $old; }