summaryrefslogtreecommitdiff
path: root/kohana/libraries/drivers/Image/ImageMagick.php
diff options
context:
space:
mode:
Diffstat (limited to 'kohana/libraries/drivers/Image/ImageMagick.php')
-rw-r--r--kohana/libraries/drivers/Image/ImageMagick.php212
1 files changed, 0 insertions, 212 deletions
diff --git a/kohana/libraries/drivers/Image/ImageMagick.php b/kohana/libraries/drivers/Image/ImageMagick.php
deleted file mode 100644
index b56ca496..00000000
--- a/kohana/libraries/drivers/Image/ImageMagick.php
+++ /dev/null
@@ -1,212 +0,0 @@
-<?php defined('SYSPATH') or die('No direct script access.');
-/**
- * ImageMagick Image Driver.
- *
- * $Id$
- *
- * @package Image
- * @author Kohana Team
- * @copyright (c) 2007-2008 Kohana Team
- * @license http://kohanaphp.com/license.html
- */
-class Image_ImageMagick_Driver extends Image_Driver {
-
- // Directory that IM is installed in
- protected $dir = '';
-
- // Command extension (exe for windows)
- protected $ext = '';
-
- // Temporary image filename
- protected $tmp_image;
-
- /**
- * Attempts to detect the ImageMagick installation directory.
- *
- * @throws Kohana_Exception
- * @param array configuration
- * @return void
- */
- public function __construct($config)
- {
- if (empty($config['directory']))
- {
- // Attempt to locate IM by using "which" (only works for *nix!)
- if ( ! is_file($path = exec('which convert')))
- throw new Kohana_Exception('image.imagemagick.not_found');
-
- $config['directory'] = dirname($path);
- }
-
- // Set the command extension
- $this->ext = (PHP_SHLIB_SUFFIX === 'dll') ? '.exe' : '';
-
- // Check to make sure the provided path is correct
- if ( ! is_file(realpath($config['directory']).'/convert'.$this->ext))
- throw new Kohana_Exception('image.imagemagick.not_found', 'convert'.$this->ext);
-
- // Set the installation directory
- $this->dir = str_replace('\\', '/', realpath($config['directory'])).'/';
- }
-
- /**
- * Creates a temporary image and executes the given actions. By creating a
- * temporary copy of the image before manipulating it, this process is atomic.
- */
- public function process($image, $actions, $dir, $file, $render = FALSE)
- {
- // We only need the filename
- $image = $image['file'];
-
- // Unique temporary filename
- $this->tmp_image = $dir.'k2img--'.sha1(time().$dir.$file).substr($file, strrpos($file, '.'));
-
- // Copy the image to the temporary file
- copy($image, $this->tmp_image);
-
- // Quality change is done last
- $quality = (int) arr::remove('quality', $actions);
-
- // Use 95 for the default quality
- empty($quality) and $quality = 95;
-
- // All calls to these will need to be escaped, so do it now
- $this->cmd_image = escapeshellarg($this->tmp_image);
- $this->new_image = ($render)? $this->cmd_image : escapeshellarg($dir.$file);
-
- if ($status = $this->execute($actions))
- {
- // Use convert to change the image into its final version. This is
- // done to allow the file type to change correctly, and to handle
- // the quality conversion in the most effective way possible.
- if ($error = exec(escapeshellcmd($this->dir.'convert'.$this->ext).' -quality '.$quality.'% '.$this->cmd_image.' '.$this->new_image))
- {
- $this->errors[] = $error;
- }
- else
- {
- // Output the image directly to the browser
- if ($render !== FALSE)
- {
- $contents = file_get_contents($this->tmp_image);
- switch (substr($file, strrpos($file, '.') + 1))
- {
- case 'jpg':
- case 'jpeg':
- header('Content-Type: image/jpeg');
- break;
- case 'gif':
- header('Content-Type: image/gif');
- break;
- case 'png':
- header('Content-Type: image/png');
- break;
- }
- echo $contents;
- }
- }
- }
-
- // Remove the temporary image
- unlink($this->tmp_image);
- $this->tmp_image = '';
-
- return $status;
- }
-
- public function crop($prop)
- {
- // Sanitize and normalize the properties into geometry
- $this->sanitize_geometry($prop);
-
- // Set the IM geometry based on the properties
- $geometry = escapeshellarg($prop['width'].'x'.$prop['height'].'+'.$prop['left'].'+'.$prop['top']);
-
- if ($error = exec(escapeshellcmd($this->dir.'convert'.$this->ext).' -crop '.$geometry.' '.$this->cmd_image.' '.$this->cmd_image))
- {
- $this->errors[] = $error;
- return FALSE;
- }
-
- return TRUE;
- }
-
- public function flip($dir)
- {
- // Convert the direction into a IM command
- $dir = ($dir === Image::HORIZONTAL) ? '-flop' : '-flip';
-
- if ($error = exec(escapeshellcmd($this->dir.'convert'.$this->ext).' '.$dir.' '.$this->cmd_image.' '.$this->cmd_image))
- {
- $this->errors[] = $error;
- return FALSE;
- }
-
- return TRUE;
- }
-
- public function resize($prop)
- {
- switch ($prop['master'])
- {
- case Image::WIDTH: // Wx
- $dim = escapeshellarg($prop['width'].'x');
- break;
- case Image::HEIGHT: // xH
- $dim = escapeshellarg('x'.$prop['height']);
- break;
- case Image::AUTO: // WxH
- $dim = escapeshellarg($prop['width'].'x'.$prop['height']);
- break;
- case Image::NONE: // WxH!
- $dim = escapeshellarg($prop['width'].'x'.$prop['height'].'!');
- break;
- }
-
- // Use "convert" to change the width and height
- if ($error = exec(escapeshellcmd($this->dir.'convert'.$this->ext).' -resize '.$dim.' '.$this->cmd_image.' '.$this->cmd_image))
- {
- $this->errors[] = $error;
- return FALSE;
- }
-
- return TRUE;
- }
-
- public function rotate($amt)
- {
- if ($error = exec(escapeshellcmd($this->dir.'convert'.$this->ext).' -rotate '.escapeshellarg($amt).' -background transparent '.$this->cmd_image.' '.$this->cmd_image))
- {
- $this->errors[] = $error;
- return FALSE;
- }
-
- return TRUE;
- }
-
- public function sharpen($amount)
- {
- // Set the sigma, radius, and amount. The amount formula allows a nice
- // spread between 1 and 100 without pixelizing the image badly.
- $sigma = 0.5;
- $radius = $sigma * 2;
- $amount = round(($amount / 80) * 3.14, 2);
-
- // Convert the amount to an IM command
- $sharpen = escapeshellarg($radius.'x'.$sigma.'+'.$amount.'+0');
-
- if ($error = exec(escapeshellcmd($this->dir.'convert'.$this->ext).' -unsharp '.$sharpen.' '.$this->cmd_image.' '.$this->cmd_image))
- {
- $this->errors[] = $error;
- return FALSE;
- }
-
- return TRUE;
- }
-
- protected function properties()
- {
- return array_slice(getimagesize($this->tmp_image), 0, 2, FALSE);
- }
-
-} // End Image ImageMagick Driver \ No newline at end of file