You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
PlexShare/fuel/core/classes/image.php

302 lines
8.2 KiB

7 years ago
<?php
/**
* Part of the Fuel framework.
*
* @package Fuel
* @version 1.8
* @author Fuel Development Team
* @license MIT License
* @copyright 2010 - 2016 Fuel Development Team
* @link http://fuelphp.com
*/
namespace Fuel\Core;
class Image
{
protected static $_instance = null;
/**
* Holds the config until an instance is initiated.
*
* @var array Config options to be passed when the instance is created.
*/
protected static $_config = array();
/**
* Initialize by loading config
*
* @return void
*/
public static function _init()
{
\Config::load('image', true);
}
/**
* Creates a new instance for static use of the class.
*
* @return Image_Driver
*/
protected static function instance()
{
if (static::$_instance == null)
{
static::$_instance = static::forge(static::$_config);
}
return static::$_instance;
}
/**
* Creates a new instance of the image driver
*
* @param array $config
* @param string $filename The file to load
* @return Image_Driver
* @throws \FuelException
*/
public static function forge($config = array(), $filename = null)
{
!is_array($config) and $config = array();
$config = array_merge(\Config::get('image', array()), $config);
$protocol = ucfirst( ! empty($config['driver']) ? $config['driver'] : 'gd');
$class = 'Image_'.$protocol;
if ($protocol == 'Driver' || ! class_exists($class))
{
throw new \FuelException('Driver '.$protocol.' is not a valid driver for image manipulation.');
}
$return = new $class($config);
if ($filename !== null)
{
$return->load($filename);
}
return $return;
}
/**
* Used to set configuration options.
*
* Sending the config options through the static reference initializes the
* instance. If you need to send a driver config through the static reference,
* make sure its the first one sent! If errors arise, create a new instance using
* forge().
*
* @param array $index An array of configuration settings.
* @param mixed $value
* @return Image_Driver
*/
public static function config($index = array(), $value = null)
{
if (static::$_instance === null)
{
if ($value !== null)
{
$index = array($index => $value);
}
if (is_array($index))
{
static::$_config = array_merge(static::$_config, $index);
}
static::instance();
return static::instance();
} else {
return static::instance()->config($index, $value);
}
}
/**
* Loads the image and checks if its compatible.
*
* @param string $filename The file to load
* @param string $return_data Decides if it should return the images data, or just "$this".
* @param mixed $force_extension Whether or not to force the image extension
* @return Image_Driver
*/
public static function load($filename, $return_data = false, $force_extension = false)
{
return static::instance()->load($filename, $return_data, $force_extension);
}
/**
* Crops the image using coordinates or percentages.
*
* Absolute integer or percentages accepted for all 4.
*
* @param integer $x1 X-Coordinate based from the top-left corner.
* @param integer $y1 Y-Coordinate based from the top-left corner.
* @param integer $x2 X-Coordinate based from the bottom-right corner.
* @param integer $y2 Y-Coordinate based from the bottom-right corner.
* @return Image_Driver
*/
public static function crop($x1, $y1, $x2, $y2)
{
return static::instance()->crop($x1, $y1, $x2, $y2);
}
/**
* Resize the image. If the width or height is null, it will resize retaining the original aspect ratio.
*
* @param integer $width The new width of the image.
* @param integer $height The new height of the image.
* @param boolean $keepar Defaults to true. If false, allows resizing without keeping AR.
* @param boolean $pad If set to true and $keepar is true, it will pad the image with the configured bgcolor
* @return Image_Driver
*/
public static function resize($width, $height, $keepar = true, $pad = false)
{
return static::instance()->resize($width, $height, $keepar, $pad);
}
/**
* Resize the image. If the width or height is null, it will resize retaining the original aspect ratio.
*
* @param integer $width The new width of the image.
* @param integer $height The new height of the image.
* @return Image_Driver
*/
public static function crop_resize($width, $height)
{
return static::instance()->crop_resize($width, $height);
}
/**
* Rotates the image
*
* @param integer $degrees The degrees to rotate, negatives integers allowed.
* @return Image_Driver
*/
public static function rotate($degrees)
{
return static::instance()->rotate($degrees);
}
/**
* Creates a vertical / horizontal or both mirror image.
*
* @param string $direction 'vertical', 'horizontal', 'both'
* @return Image_Driver
*/
public static function flip($direction)
{
return static::instance()->flip($direction);
}
/**
* Adds a watermark to the image.
*
* @param string $filename The filename of the watermark file to use.
* @param string $position The position of the watermark, ex: "bottom right", "center center", "top left"
* @param integer $padding The spacing between the edge of the image.
* @return Image_Driver
*/
public static function watermark($filename, $position, $padding = 5)
{
return static::instance()->watermark($filename, $position, $padding);
}
/**
* Adds a border to the image.
*
* @param integer $size The side of the border, in pixels.
* @param string $color A hexadecimal color.
* @return Image_Driver
*/
public static function border($size, $color = null)
{
return static::instance()->border($size, $color);
}
/**
* Masks the image using the alpha channel of the image input.
*
* @param string $maskimage The location of the image to use as the mask
* @return Image_Driver
*/
public static function mask($maskimage)
{
return static::instance()->mask($maskimage);
}
/**
* Adds rounded corners to the image.
*
* @param integer $radius
* @param integer $sides Accepts any combination of "tl tr bl br" separated by spaces, or null for all sides
* @param integer $antialias Sets the anti-alias range.
* @return Image_Driver
*/
public static function rounded($radius, $sides = null, $antialias = null)
{
return static::instance()->rounded($radius, $sides, $antialias);
}
/**
* Turns the image into a grayscale version
*
* @return Image_Driver
*/
public static function grayscale()
{
return static::instance()->grayscale();
}
/**
* Saves the image, and optionally attempts to set permissions
*
* @param string $filename The location where to save the image.
* @param string $permissions Allows unix style permissions
* @return Image_Driver
*/
public static function save($filename = null, $permissions = null)
{
return static::instance()->save($filename, $permissions);
}
/**
* Saves the image, and optionally attempts to set permissions
*
* @param string $prepend The text to add to the beginning of the filename.
* @param string $append The text to add to the end of the filename.
* @param string $permissions Allows unix style permissions
* @return Image_Driver
*/
public static function save_pa($prepend, $append = null, $permissions = null)
{
return static::instance()->save_pa($prepend, $append, $permissions);
}
/**
* Outputs the file directly to the user.
*
* @param string $filetype The extension type to use. Ex: png, jpg, bmp, gif
* @return Image_Driver
*/
public static function output($filetype = null)
{
return static::instance()->output($filetype);
}
/**
* Returns sizes for the currently loaded image, or the image given in the $filename.
*
* @param string $filename The location of the file to get sizes for.
* @return object An object containing width and height variables.
*/
public static function sizes($filename = null)
{
return static::instance()->sizes($filename);
}
/**
* Reloads the image.
*
* @return Image_Driver
*/
public static function reload()
{
return static::instance()->reload();
}
}