Files
server/usr/share/psa-pear/pear/php/Horde/Image/Effect.php
2026-01-07 20:52:11 +01:00

126 lines
3.2 KiB
PHP

<?php
/**
* Copyright 2002-2017 Horde LLC (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (LGPL). If you
* did not receive this file, see http://www.horde.org/licenses/lgpl21.
*
* @author Chuck Hagenbuch <chuck@horde.org>
* @author Michael J. Rubinsky <mrubinsk@horde.org>
* @author Jan Schneider <jan@horde.org>
* @category Horde
* @license http://www.horde.org/licenses/lgpl21 LGPL-2.1
* @package Image
*/
/**
* The Horde_Image_Effect parent class defines a general API for ways to apply
* effects to Horde_Image objects.
*
* @author Chuck Hagenbuch <chuck@horde.org>
* @author Michael J. Rubinsky <mrubinsk@horde.org>
* @author Jan Schneider <jan@horde.org>
* @category Horde
* @copyright 2002-2017 Horde LLC
* @license http://www.horde.org/licenses/lgpl21 LGPL-2.1
* @package Image
*/
class Horde_Image_Effect
{
/**
* Effect parameters.
*
* @var array
*/
protected $_params = array();
/**
* The bound Horde_Image object
*
* @var Horde_Image
*/
protected $_image = null;
/**
* Logger.
*/
protected $_logger;
/**
* Effect constructor.
*
* @param array $params Any parameters for the effect. Parameters are
* documented in each subclass.
*/
public function __construct($params = array())
{
$this->_logger = new Horde_Support_Stub();
foreach ($params as $key => $val) {
$this->_params[$key] = $val;
}
}
/**
* Bind this effect to a Horde_Image object.
*
* @param Horde_Image $image The Horde_Image object
*/
public function setImageObject($image)
{
$this->_image = $image;
}
/**
* Attaches a logger.
*
* @param Horde_Log_Logger $logger A logger.
*/
public function setLogger($logger)
{
$this->_logger = $logger;
}
/**
* Effect factory.
*
* @param string $type An effect name.
* @param string $driver An image driver name.
* @param array $params Any effect parameters.
*
* @return Horde_Image_Effect An effect instance.
*/
public static function factory($type, $driver, $params)
{
if (is_array($type)) {
list($app, $type) = $type;
}
// First check for a driver specific effect, if we can't find one,
// assume there is a vanilla effect object around.
$class = 'Horde_Image_Effect_' . $driver . '_' . $type;
$vclass = 'Horde_Image_Effect_' . $type;
if (class_exists($class)) {
$effect = new $class($params);
} elseif (class_exists($vclass)) {
$effect = new $vclass($params);
} else {
$message = sprintf(
'Horde_Image Effect "%s" for "%s" driver not found.',
$type,
$driver
);
if (!empty($params['logger'])) {
$params['logger']->err($message);
}
throw new Horde_Image_Exception($message);
}
if (!empty($params['logger'])) {
$effect->setLogger($params['logger']);
}
return $effect;
}
}