<?php | |
/*********************************************************************** | |
** Title.........: ImageMagick Driver | |
** Version.......: 1.0 | |
** Author........: Xiang Wei ZHUO <wei@zhuo.org> | |
** Filename......: IM.php | |
** Last changed..: 30 Aug 2003 | |
** Notes.........: Orginal is from PEAR | |
**/ | |
// +----------------------------------------------------------------------+ | |
// | PHP Version 4 | | |
// +----------------------------------------------------------------------+ | |
// | Copyright (c) 1997-2002 The PHP Group | | |
// +----------------------------------------------------------------------+ | |
// | This source file is subject to version 2.02 of the PHP license, | | |
// | that is bundled with this package in the file LICENSE, and is | | |
// | available at through the world-wide-web at | | |
// | http://www.php.net/license/2_02.txt. | | |
// | If you did not receive a copy of the PHP license and are unable to | | |
// | obtain it through the world-wide-web, please send a note to | | |
// | license@php.net so we can mail you a copy immediately. | | |
// +----------------------------------------------------------------------+ | |
// | Authors: Peter Bowyer <peter@mapledesign.co.uk> | | |
// +----------------------------------------------------------------------+ | |
// | |
// $Id:IM.php 937 2008-01-20 23:13:25Z ray $ | |
// | |
// Image Transformation interface using command line ImageMagick | |
// | |
require_once "../ImageManager/Classes/Transform.php"; | |
Class Image_Transform_Driver_IM extends Image_Transform | |
{ | |
/** | |
* associative array commands to be executed | |
* @var array | |
*/ | |
var $command = array(); | |
/** | |
* | |
* | |
*/ | |
function Image_Transform_Driver_IM() | |
{ | |
return true; | |
} // End Image_IM | |
/** | |
* Load image | |
* | |
* @param string filename | |
* | |
* @return mixed none or a PEAR error object on error | |
* @see PEAR::isError() | |
*/ | |
function load($image) | |
{ | |
$this->uid = md5($_SERVER['REMOTE_ADDR']); | |
/*if (!file_exists($image)) { | |
return PEAR::raiseError('The image file ' . $image . ' does\'t exist', true); | |
}*/ | |
$this->image = $image; | |
$this->_get_image_details($image); | |
} // End load | |
/** | |
* Resize Action | |
* | |
* @param int new_x new width | |
* @param int new_y new height | |
* | |
* @return none | |
* @see PEAR::isError() | |
*/ | |
function _resize($new_x, $new_y) | |
{ | |
/*if (isset($this->command['resize'])) { | |
return PEAR::raiseError("You cannot scale or resize an image more than once without calling save or display", true); | |
}*/ | |
$this->command['resize'] = "-geometry ${new_x}x${new_y}!"; | |
$this->new_x = $new_x; | |
$this->new_y = $new_y; | |
} // End resize | |
/** | |
* Crop the image | |
* | |
* @param int $crop_x left column of the image | |
* @param int $crop_y top row of the image | |
* @param int $crop_width new cropped image width | |
* @param int $crop_height new cropped image height | |
*/ | |
function crop($crop_x, $crop_y, $crop_width, $crop_height) | |
{ | |
$this->command['crop'] = "-crop {$crop_width}x{$crop_height}+{$crop_x}+{$crop_y}"; | |
} | |
/** | |
* Flip the image horizontally or vertically | |
* | |
* @param boolean $horizontal true if horizontal flip, vertical otherwise | |
*/ | |
function flip($horizontal) | |
{ | |
if($horizontal) | |
$this->command['flop'] = "-flop"; | |
else | |
$this->command['flip'] = "-flip"; | |
} | |
/** | |
* rotate | |
* | |
* @param int angle rotation angle | |
* @param array options no option allowed | |
* | |
*/ | |
function rotate($angle, $options=null) | |
{ | |
if ('-' == $angle{0}) { | |
$angle = 360 - substr($angle, 1); | |
} | |
$this->command['rotate'] = "-rotate $angle"; | |
} // End rotate | |
/** | |
* addText | |
* | |
* @param array options Array contains options | |
* array( | |
* 'text' The string to draw | |
* 'x' Horizontal position | |
* 'y' Vertical Position | |
* 'Color' Font color | |
* 'font' Font to be used | |
* 'size' Size of the fonts in pixel | |
* 'resize_first' Tell if the image has to be resized | |
* before drawing the text | |
* ) | |
* | |
* @return none | |
* @see PEAR::isError() | |
*/ | |
function addText($params) | |
{ | |
$default_params = array( | |
'text' => 'This is Text', | |
'x' => 10, | |
'y' => 20, | |
'color' => 'red', | |
'font' => 'Arial.ttf', | |
'resize_first' => false // Carry out the scaling of the image before annotation? | |
); | |
$params = array_merge($default_params, $params); | |
extract($params); | |
if (true === $resize_first) { | |
// Set the key so that this will be the last item in the array | |
$key = 'ztext'; | |
} else { | |
$key = 'text'; | |
} | |
$this->command[$key] = "-font $font -fill $color -draw 'text $x,$y \"$text\"'"; | |
// Producing error: gs: not found gs: not found convert: Postscript delegate failed [No such file or directory]. | |
} // End addText | |
/** | |
* Adjust the image gamma | |
* | |
* @param float $outputgamma | |
* | |
* @return none | |
*/ | |
function gamma($outputgamma=1.0) { | |
$this->command['gamma'] = "-gamma $outputgamma"; | |
} | |
function reduce_colors($number = 256) | |
{ | |
$this->command['colors'] = "-colors $number"; | |
} | |
/** | |
* Save the image file | |
* | |
* @param string $filename the name of the file to write to | |
* @param quality $quality image dpi, default=75 | |
* @param string $type (JPG,PNG...) | |
* | |
* @return none | |
*/ | |
function save($filename, $type='', $quality = 85) | |
{ | |
$type == '' ? $this->type : $type; | |
$cmd = '' . IMAGE_TRANSFORM_LIB_PATH . 'convert '; | |
$cmd .= implode(' ', $this->command) . " -quality $quality "; | |
$cmd .= '"'.($this->image) . '" "' . ($filename) . '"'; | |
//$cmd = str_replace('/', '\\', $cmd); | |
//echo($cmd.'<br>'); | |
exec($cmd,$retval); | |
//error_log('IM '.print_r($retval,true)); | |
} // End save | |
/** | |
* Display image without saving and lose changes | |
* | |
* @param string type (JPG,PNG...); | |
* @param int quality 75 | |
* | |
* @return none | |
*/ | |
function display($type = '', $quality = 75) | |
{ | |
if ($type == '') { | |
header('Content-type: image/' . $this->type); | |
passthru(IMAGE_TRANSFORM_LIB_PATH . ' ' . implode(' ', $this->command) . " -quality $quality " . escapeshellarg($this->image) . ' ' . strtoupper($this->type) . ":-"); | |
} else { | |
header('Content-type: image/' . $type); | |
passthru(IMAGE_TRANSFORM_LIB_PATH . 'convert ' . implode(' ', $this->command) . " -quality $quality " . escapeshellarg($this->image) . ' ' . strtoupper($type) . ":-"); | |
} | |
} | |
/** | |
* Destroy image handle | |
* | |
* @return none | |
*/ | |
function free() | |
{ | |
return true; | |
} | |
} // End class ImageIM | |
?> |