** 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 | // +----------------------------------------------------------------------+ // // $Id$ // // Image Transformation interface using command line ImageMagick // require_once "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"; } /** * Save the image file * * @param $filename string the name of the file to write to * @param $quality quality image dpi, default=75 * @param $type string (JPG,PNG...) * * @return none */ function save($filename, $type='', $quality = 85) { $type == '' ? $this->type : $type; $cmd = '' . IMAGE_TRANSFORM_LIB_PATH . 'convert" ' . implode(' ', $this->command) . " -quality $quality " . ($this->image) . ' ' . ($filename) . ' 2>&1'; //echo $cmd; exec($cmd); } // 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 . 'convert ' . 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 ?>