Revision: 9749
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at November 20, 2008 01:49 by iTony
Initial Code
<?php class image { private $supported, $edit, $root, $image; public function __construct( $root ) { //Check if we're working with an actual //Directory if( is_dir($root) ) { //Fill in the array of the things we can do $this->edit = array( 'negative' => IMG_FILTER_NEGATE, 'greyscale' => IMG_FILTER_GRAYSCALE, 'brightness'=> IMG_FILTER_BRIGHTNESS, 'contract' => IMG_FILTER_CONTRAST, 'colorize' => IMG_FILTER_COLORIZE, 'edge' => IMG_FILTER_EDGEDETECT, 'emboss' => IMG_FILTER_EMBOSS, 'guassion' => IMG_FILTER_GAUSSIAN_BLUR, 'blur' => IMG_FILTER_SELECTIVE_BLUR, 'sketch' => IMG_FILTER_MEAN_REMOVAL, 'smooth' => IMG_FILTER_SMOOTH ); //Fill in an array of the image formats we support $this->supported = array( 'jpeg' => 'jpeg', 'jpg' => 'jpeg', 'png' => 'png', 'gif' => 'gif' ); //Finally fill in the root and enforce trailing slash $this->root = rtrim( $root, '/' ) . '/'; } else { throw new Exception("[Class Of: Image] Provided root directory does not exists"); } } public function set( $img ) { //See if our image file exists and it's supprted if( file_exists( $this->root . $img ) ) { $type = pathinfo( $this->root . $img, PATHINFO_EXTENSION ); if( array_key_exists( $type, $this->supported ) ) { //Set all neccesary information $function = 'imagecreatefrom' . $this->supported[ $type ]; $this->image['file'] = $img; $this->image['oResource'] = $function( $this->root . $img ); $this->image['width'] = imagesx( $this->image['oResource'] ); $this->image['height'] = imagesy( $this->image['oResource'] ); $this->image['type'] = $this->supported[ $type ]; ///Below is error reprting } else { throw new Exception("[Class Of: Image] Image file is not currently supported"); } } else { throw new Exception("[Class Of: Image] Image file does not exists relative to root"); } return $this; } public function execute( $filename = '' ) { //Make a filename of one is not provided if( $filename == '' ) { $filename = '_edited_' . $this->image['file']; } //Create image $function = 'image' . $this->image['type']; $function( $this->image['oResource'], $this->root . $filename, 100); //Clean cache imagedestroy( $this->image['oResource'] ); } public function effect() { //gather up all our arguments $args = func_get_args(); //Check if I support what they want done if( array_key_exists( $args[0], $this->edit ) ) { //Create priliminary argument array $arguments = array( $this->image['oResource'], $this->edit[ $args[0] ]); unset($args[0]); sort( $args ); //unset the unnecesaries //Now all our image filter function $arguments = array_merge( $arguments, $args ); call_user_func_array( 'imagefilter', $arguments ); return $this; ///Error reporting } else { throw new Exception("[Class Of: Gallery] Effect not supported"); } } public function ratio( $maxWidth ) { //Calculate the max height and send off to resize function $maxHeight = ($maxWidth * $this->image['height']) / $this->image['width']; $this->resize( $maxWidth, $maxHeight ); } public function resize( $width, $height = '' ) { if( empty($height) ) { //Assume width is a percentage value now //Check for .20 || .2 bug $num = ( $num > 10 ) ? '.' . $num : '.0' . $num; $width = $this->image['width'] - ($this->image['width'] * $num); $height = $this->image['height'] - ($this->image['height'] * $num); } //Create a temporary pallete $img = imagecreatetruecolor( $width, $height ); imagecopyresampled( $img, $this->image['oResource'], 0, 0, 0, 0, $width, $height, $this->image['width'], $this->image['height']); //Fill in the original with the new $this->image['oResource'] = $img; $this->image['width'] = $width; $this->image['height'] = $height; return $this; } public function flip( $dir ) { //Check is we support basically switch( $dir ) { //The process for flipping either left and right //Deviates by the subtraction of one variable case $dir == 'left' || $dir == 'right': { //Create a pallete $img = imagecreatetruecolor( $this->image['height'], $this->image['width'] ); //Begin traversing the image plane at the left uppermost corner //travel down to the right down corner for( $y = $this->image['height']; $y >= 0; --$y ) { for( $x = 0; $x <= $this->image['width']; ++$x ) { //Extract color index $rgb = imagecolorat( $this->image['oResource'], $x, $y ); //Determine side so we can check which variable to subtract from if( $dir == 'left' ) { imagesetpixel( $img, $y, $this->image['width'] - $x, $rgb ); } else { imagesetpixel( $img, $this->image['height'] - $y, $x, $rgb); } } } //set new height and width $this->image['width'] = imagesx( $img ); $this->image['height'] = imagesy( $img ); break; } //Down is rather simple... case $dir == 'down' : { $img = imagerotate( $this->image['oResource'], 180, 0); } } //set new image resource $this->image['oResource'] = $img; return $this; } public function crop( $oX, $oY, $nX, $nY ) { //We must determine the number by which to //incrementing variables as well as the length //and height of the new image if( $oX > $nX ) { $xBegin = $nX; $xLen = $oX - $nX; } else { $xBegin = $oX; $xLen = $nX - $oX; } if( $oY > $nY ) { $yBegin = $nY; $yLen = $oY - $nY; } else { $yBegin = $oY; $yLen = $nY - $oY; } //Create pallete $img = imagecreatetruecolor( $xLen, $yLen ); //Begin incrementing at 0 as if traversing //the new image instead of the old for( $y = 0; $y <= $yLen; ++$y ) { for( $x = 0; $x <= $xLen; ++$x ) { //Adding our pretermined value takes us the pixel //location we wanted to go to $rgb = imagecolorat( $this->image['oResource'], $x + $xBegin, $y + $yBegin); imagesetpixel( $img, $x, $y , $rgb ); } } //Set neccesary information $this->image['oResource'] = $img; $this->image['height'] = imagesy( $img ); $this->image['width'] = imagesx( $img ); return $this; } } ?>
Initial URL
Initial Description
Initial Title
image wrapper class using gd library
Initial Tags
class, images
Initial Language
PHP