Php gd2 ile resize(yeniden boyutlandırma), Thumbnail(küçük resim)
,crop (resim kesme),
Rotate (resim çevirme)efects
(resim efektleri) gibi işlemleri hızlandırmak için geliştirilmiş bir class
class.gd2.php
<?php /* Errors */ define('GD2_ERROR_NOTICE', 0); define('GD2_ERROR_ERROR', 1); class Gd2{ var $useGdFilters; var $imgInfos = array( 'type' => '', 'width' => 0, 'height' => 0 ); var $bgColor = array( 'red' => 255, 'green' => 255, 'blue' => 255 ); var $_gdIsLoaded; var $_imgHandler; var $_supportedTypes = array(); var $_errors = array( 'notices' => array(), 'errors' => array() ); /* * PHP 4 Constructor */ function Gd2($img = '', $red = 255, $green = 255, $blue = 255){ $this->__construct($img, $red, $green, $blue); register_shutdown_function(array(&$this,'__destruct')); } /* * PHP 5 Constructor */ function __construct($img = '', $red = 255, $green = 255, $blue = 255){ if(!$this->_gdIsLoaded = extension_loaded('gd')) return $this->_setError('GD library is not installed in your system'); elseif(!function_exists('imagecreatetruecolor')) return $this->_setError('This class require the version 2 of GD library'); $types = imageTypes(); if ($types & IMG_PNG){ $this->_supportedTypes['png']['read'] = true; $this->_supportedTypes['png']['write'] = true; } if ($types & IMG_GIF || function_exists('imagegif')){ $this->_supportedTypes['gif']['read'] = true; $this->_supportedTypes['gif']['write'] = true; } elseif (function_exists('imagecreatefromgif')){ $this->_supportedTypes['gif']['read'] = true; $this->_supportedTypes['gif']['write'] = false; } if ($types & IMG_JPG){ $this->_supportedTypes['jpeg']['read'] = true; $this->_supportedTypes['jpeg']['write'] = true; } $this->bgColor['red'] = min(255,max(0,$red)); $this->bgColor['green'] = min(255,max(0,$green)); $this->bgColor['blue'] = min(255,max(0,$blue)); $this->useGdFilters = function_exists('imagefilter'); if(is_file($img)) $this->createFromFile($img); } /* * Destructor */ function __destruct(){ $this->destroy(); } /************************************ Publics Methods ************************************/ /* * Image resource destroyer * * @return bool * @access public */ function destroy(){ if(is_resource($this->_imgHandler)){ imagedestroy($this->_imgHandler); return true; } return false; } /* * Image resource destroyer * * @param string $file the file path * * @return bool * @access public */ function createFromFile($file){ if(!$this->_gdIsLoaded) return false; elseif(!is_file($file)) return $this->_setError('Hata! Gorsel Bulunamadi.'); $this->_init(); $ext = $this->getExt($file); if(!$this->_isSupported($ext,'read')) return $this->_setError('Image "'.$ext.'" are not supported'); if ($ext === 'jpeg') $this->_imgHandler = @imagecreatefromjpeg($file); elseif($ext === 'png') $this->_imgHandler = @imagecreatefrompng($file); elseif($ext === 'gif') $this->_imgHandler = @imagecreatefromgif($file); if(!$this->_imgHandler) return $this->_setError('Fail to create the image resource'); $this->imgInfos['type'] = $ext; $this->imgInfos['width'] = imagesx($this->_imgHandler); $this->imgInfos['height'] = imagesy($this->_imgHandler); return true; } /* * Resize the image to the specified dimensions * * @param int $new_width the image width * @param int $new_height the image height * @param int $x vertical offset for crop resizing * @param int $y horizontal offset for crop resizing * @param int $size image dimensions for crop resizing * * @return bool * @access public */ function CreateLogo($pic_file, $logo_file){ $this->img_pic = imagecreatefromjpeg($pic_file); $this->img_logo = imagecreatefrompng($logo_file); } function setAlign($align) { if ($align =="TL") { $this->dpy = 5; $this->dpx = 5; } elseif ($align =="TR") { $this->dpy = 5; $this->dpx = imagesx($this->img_pic)-(imagesx($this->img_logo)+5); } elseif ($align =="BR") { $this->dpy = imagesy($this->img_pic)-(imagesy($this->img_logo)+5); $this->dpx = imagesx($this->img_pic)-(imagesx($this->img_logo)+5); } elseif ($align =="BL") { $this->dpy = imagesy($this->img_pic)-(imagesy($this->img_logo)+5); $this->dpx = 5; } elseif ($align =="BC") { $this->dpy = imagesy($this->img_pic)-(imagesy($this->img_logo)+5); $dc = imagesx($this->img_pic)/2; $dc2 = imagesx($this->img_logo)/2; $this->dpx = $dc-$dc2; } elseif ($align =="TC") { $this->dpy = 5; $dc = imagesx($this->img_pic)/2; $dc2 = imagesx($this->img_logo)/2; $this->dpx = $dc-$dc2; } else { $this->dpy = 5; $this->dpx = 5; } } function AddLogo($align){ $this->setAlign($align); $sx = imagesx($this->img_logo); $sy = imagesy($this->img_logo); imagecopy($this->img_pic, $this->img_logo, $this->dpx, $this->dpy, 0, 0, $sx, $sy); } function resizeImage( $new_width, $new_height, $x = 0, $y = 0,$size = 0){ if($this->_isReady()){ $image_p = imagecreatetruecolor($new_width, $new_height); imagecopyresampled($image_p, $this->_imgHandler, 0, 0,0,0, $new_width, $new_height, $this->imgInfos['width'], $this->imgInfos['height']); imagedestroy($this->_imgHandler); $this->_imgHandler = $image_p; if(!empty($size)){ $image2 = imagecreatetruecolor($size,$size); imagecopyresampled($image2,$this->_imgHandler,$x,$y,0,0,$size,$size,$size,$size); imagedestroy($this->_imgHandler); $this->_imgHandler = $image2; } return true; } else return false; } /* * Resize the image to the specified dimensions * * @param int $new_width the image width * @param int $new_height the image height * @param int $x vertical offset for crop resizing * @param int $y horizontal offset for crop resizing * @param int $size image dimensions for crop resizing * * @return bool * @access public */ function oneSizeThumbnail($size){ if($this->_isReady()){ if($this->imgInfos['width'] > $this->imgInfos['height']){ $size_percent = (int)($size / ($this->imgInfos['width'] / 100)); $new_height = (int) ($size_percent * ($this->imgInfos['height']/100)); $new_width = $size; $y = ((int)$size - (int)$new_height) /2 ; $x = 0; }else{ $size_percent = (int)($size / ($this->imgInfos['height'] / 100)); $new_width = (int) ($size_percent * ($this->imgInfos['width']/100)); $new_height = $size; $x = ($size - $new_width) / 2; $y = 0; } return $this->resizeImage($new_width,$new_height,$x,$y,$size); } else return false; } /* * Resize the image to the specified dimensions * * @param int $new_width the image width * @param int $new_height the image height * @param int $x vertical offset for crop resizing * @param int $y horizontal offset for crop resizing * @param int $size image dimensions for crop resizing * * @return bool * @access public */ function maxSizeThumbnail($size){ if($this->_isReady()){ if($this->imgInfos['width'] > $this->imgInfos['height']){ $size_percent = (int)($size / ($this->imgInfos['width'] / 100)); $new_height = (int) ($size_percent * ($this->imgInfos['height']/100)); $new_width = $size; $y = ($size - $new_height) / 2; $x = 0; }else{ $size_percent = (int)($size / ($this->imgInfos['height'] / 100)); $new_width = (int) ($size_percent * ($this->imgInfos['width']/100)); $new_height = $size; $x = ($size - $new_width) / 2; $y = 0; } return $this->resizeImage($new_width,$new_height,$x,$y); } else return false; } /* * Crop the image to the specified dimensions * * @param int $width the croped image width * @param int $height the croped image height * @param int $x vertical offset for croping * @param int $y horizontal offset for croping * * @return bool * @access public */ function cropImage($width,$height,$x,$y){ if($this->_isReady()){ $image2 = imagecreatetruecolor($width, $height); imagecopymerge($image2,$this->_imgHandler,0,0,$x,$y,$width, $height,100); imagedestroy($this->_imgHandler); $this->_imgHandler = $image2; return true; }else return false; } /* * Apply rotation to the image * * @param int $anle the rotation angle * @param int $color the background color for some rotation * * @return bool * @access public */ function imageRotate($angle,$color = 0){ if($this->_isReady()){ if(!is_numeric($angle)) return $this->_setError('Invalid "angle" parameter'); elseif(empty($angle) || $angle === 360) return true; if(empty($color)) $color = imagecolorat($this->_imgHandler,0,0); elseif(!is_array($color)) $color = $this->_hex2rgb($color); $this->_imgHandler = imagerotate($this->_imgHandler, $angle, imageColorAllocate($this->_imgHandler,$color['red'],$color['green'],$color['blue'])); }else return false; } /* * Reverse the image * * @return bool * @access public */ function mirror(){ if($this->_isReady()){ $tmpimage = imagecreatetruecolor($this->imgInfos['width'], $this->imgInfos['height']); for ($x=0;$x<$this->imgInfos['width'];++$x) imagecopy($tmpimage,$this->_imgHandler, $x, 0, $this->imgInfos['width'] - $x - 1, 0, 1, $this->imgInfos['height']); imagedestroy($this->_imgHandler); $this->_imgHandler = $tmpimage; return true; } return false; } /* * Apply Negate filter to the image * * @return bool * @access public */ function effectNegate(){ if($this->useGdFilters){ if($this->_isReady()) return imagefilter($this->_imgHandler, IMG_FILTER_NEGATE); else return false; }else return $this->_setError('Image filters is not available on PHP4'); } /* * Apply Colorize filter to the image * * @param string | array $color the color of the filter * * @return bool * @access public */ function effectColorize($color){ if($this->useGdFilters){ if($this->_isReady()){ if(!is_array($color)) $color = $this->_hex2rgb($color); return imagefilter($this->_imgHandler,IMG_FILTER_COLORIZE,$color['red'],$color['green'],$color['blue']); }else return false; }else return $this->_setError('Image filters is not available on PHP4'); } /* * Apply Grayscale filter to the image * * @return bool * @access public */ function effectGrayscale(){ if($this->useGdFilters){ if($this->_isReady()) return imagefilter($this->_imgHandler, IMG_FILTER_GRAYSCALE); else return false; }else return $this->_setError('Image filters is not available on PHP4'); } /* * Apply Edge Detect filter to the image * * @return bool * @access public */ function effectEdgeDetect(){ if($this->useGdFilters){ if($this->_isReady()) return imagefilter($this->_imgHandler, IMG_FILTER_EDGEDETECT); else return false; }else return $this->_setError('Image filters is not available on PHP4'); } /* * Apply Selective Blur filter to the image * * @return bool * @access public */ function effectSelectiveBlur(){ if($this->useGdFilters){ if($this->_isReady()) return imagefilter($this->_imgHandler, IMG_FILTER_SELECTIVE_BLUR); else return false; } else return $this->_setError('Image filters is not available on PHP4'); } /* * Apply Contrast filter to the image * * @param int $val the effect level * * @return bool * @access public */ function effectContrast($val){ if($this->useGdFilters){ if($this->_isReady()){ return imagefilter($this->_imgHandler, IMG_FILTER_CONTRAST,$val); } else return false; } else return $this->_setError('Image filters is not available on PHP4'); } /* * Apply Brightness filter to the image * * @param int $val the effect level * * @return bool * @access public */ function effectBrightness($val){ if($this->useGdFilters){ if($this->_isReady()) return imagefilter($this->_imgHandler, IMG_FILTER_BRIGHTNESS,$val); else return false; } else return $this->_setError('Image filters is not available on PHP4'); } /* * Apply Gausian Blur filter to the image * * @return bool * @access public */ function effectGaussianBlur(){ if($this->useGdFilters){ if($this->_isReady()) return imagefilter($this->_imgHandler, IMG_FILTER_GAUSSIAN_BLUR); else return false; } else return $this->_setError('Image filters is not available on PHP4'); } /* * Apply Smooth filter to the image * * @param int $val the effect level * * @return bool * @access public */ function effectSmooth($val){ if($this->useGdFilters){ if($this->_isReady()) return imagefilter($this->_imgHandler,IMG_FILTER_SMOOTH,$val); else return false; } else return $this->_setError('Image filters is not available on PHP4'); } /* * Apply Emboss filter to the image * * @return bool * @access public */ function effectEmboss(){ if($this->useGdFilters){ if($this->_isReady()) return imagefilter($this->_imgHandler,IMG_FILTER_EMBOSS); else return false; } else return $this->_setError('Image filters is not available on PHP4'); } /* * Apply Mean Removal filter to the image * * @return bool * @access public */ function effectMeanRemoval(){ if($this->useGdFilters){ if($this->_isReady()) return imagefilter($this->_imgHandler,IMG_FILTER_MEAN_REMOVAL); else return false; } else return $this->_setError('Image filters is not available on PHP4'); } /* * Apply negate filter to the image * * @return bool * @access public */ function setTransparent($color){ if($this->_isReady()){ if(!is_array($color)) $color = $this->_hex2rgb($color); if(!imageistruecolor($this->_imgHandler)) $this->toTrueColor(); imagecolortransparent($this->_imgHandler,imagecolorallocate($this->_imgHandler,$color['red'],$color['green'],$color['blue'])); } else return false; } /* * Convert an image with palette color to true color image * * @return bool * @access public */ function toTrueColor(){ if($this->_isReady()){ if(!imageistruecolor($this->_imgHandler)){ $img2 = imagecreatetruecolor($this->imgInfos['width'], $this->imgInfos['height']); imagecopymerge($img2,$this->_imgHandler,0,0,0,0,$this->imgInfos['width'],$this->imgInfos['height'],$this->imgInfos['width'],$this->imgInfos['height'],100); imagedestroy($this->_imgHandler); $this->_imgHandler = $img2; } return true; } return false; } /* * set the background color for the created images * * @param string|array $color the color in hex or rgb (all "rgb" or "r" or "g" or "b") format * * @return bool * @access public */ function setBgColor($color){ if(is_string($color)){ $this->bgColor = $this->_hex2rgb($color); return true; }elseif(is_array($color)){ if($this->_isRgbColor($color)){ $this->bgColor = $color; return true; }elseif(isset($color['red'])){ $this->bgColor['red'] = $color['red']; return true; }elseif(isset($color['green'])){ $this->bgColor['green'] = $color['green']; return true; }elseif(isset($color['blue'])){ $this->bgColor['blue'] = $color['blue']; return true; } else return false; } else return false; } /* * display the image * * @param string $type the output type * * @return bool * @access public */ function display($type = ''){ if($this->_isReady()){ if($type === '') // i don't use empty because i don't remember if anyone of the IMAGETYPE_* constante have 0 for value $type = $this->imgInfos['type']; elseif(is_numeric($type)) $type = $this->type2Ext($type); else{ $type = strtolower($type); if($type === 'jpg') $type = 'jpeg'; } if(!$this->_isSupported($type,'write')) return $this->_setError('Image "'.$type.'" not supported for output'); header('Content-type: image/'.$type); if ($type === 'jpeg') imagejpeg($this->_imgHandler); elseif($type === 'png') imagepng($this->_imgHandler); elseif($type === 'gif') imagegif($this->_imgHandler); }elseif($this->isError()) $this->_getErrorImage(); else $this->_getErrorImage('No image handler found'); } /* * save the image * * @param string $filePath the save path * @param int $quality output quality for jpeg * * @return bool * @access public */ function save( $filePath, $quality = 100){ if($this->_isReady()){ if(empty($filePath)) return $this->_setError('Can not save image file in a empty file path'); $type = $this->getExt($filePath); if(!$this->_isSupported($type,'write')) return $this->_setError('Image "'.$type.'" not supported for output'); if ($type === 'jpeg'){ if(!is_numeric($quality)) $quality = 100; else $quality = min(100,max(0,$quality)); imagejpeg($this->_imgHandler,$filePath,$quality); }elseif ($type === 'png') imagepng($this->_imgHandler,$filePath); elseif ($type === 'gif') imagegif($this->_imgHandler, $filePath); } } /* * convert an imagetype to the image extension string * * @param string $type the type of file you want get * * @return str on success or bool on fail * @access public */ function type2Ext($type){ if($type === IMAGETYPE_GIF) return 'gif'; elseif($type === IMAGETYPE_PNG) return 'png'; elseif($type === IMAGETYPE_JPEG) return 'jpeg'; else return false; } /* * Public isSupported method * * @param string $type the type of file you want check * @param string|array $mode the mode you want check * * @return bool * @access public */ function isSupported($type, $mode = 'read') { return $this->_isSupported(strtolower($type),(is_array($mode) ? $mode : strtolower($mode))); } /* * return the file extension * * @param string $fileName the file name or path * * @return str * @access public */ function getExt($fileName){ if(empty($fileName)) return ''; elseif(false === ($pos = strrpos($fileName,'.'))) return ''; $ext = strtolower(substr($fileName,++$pos)); if($ext === 'jpg') $ext = 'jpeg'; return $ext; } /* * Check if the class have an error * * @return bool * @access public */ function isError() { return !empty($this->_errors['errors']); } /* * Return the consigned errors * * @param bool $toStr returned the value on array or on string * @param bool $html if return string the separator must be a normal line return with space or a html line break * * * @return array | string * @access public */ function getErrors( $toStr = false, $html = false){ if(empty($this->_errors['errors'])) return ''; if(!$toStr) return $this->_errors['errors']; elseif(count($this->_errors['errors']) === 1) return $this->_errors['errors'][0]; else{ $ret = ''; foreach($this->_errors['errors'] as $error) $ret .= $error.($html ? '<br />' : " \n"); return $ret; } } /* * Return the last consigned error * * @return str * @access public */ function getLastError(){ if(empty($this->_errors['errors'])) return false; return $this->_errors['errors'][(count($this->_errors)-1)]; } /************************************ Privates Methodss ************************************/ /* * Initialise the class attributs * * @return void * @access private */ function _init(){ $this->destroy(); $this->imgInfos = array(); } /* * Check if the class can work * * @return bool * @access private */ function _isReady() { return ($this->_gdIsLoaded && !$this->isError() && is_resource($this->_imgHandler)); } /* * Check if an extension is supported for reading and/or writting * * @param string $type the type of file you want check * @param string|array $mode the mode you want check * * @return bool * @access private */ function _isSupported($type, $mode){ if(!isset($this->_supportedTypes[$type])) return false; elseif(is_array($mode)) return ($this->_supportedTypes[$type]['read'] && $this->_supportedTypes[$type]['write']); elseif(!isset($this->_supportedTypes[$type][$mode])) return false; else return $this->_supportedTypes[$type][$mode]; } /* * error handling * * @param string $msg the error message * @param string|array $level the level of the error * * @return bool * @access private */ function _setError( $msg, $level = GD2_ERROR_ERROR){ $msg = trim($msg); if($level === GD2_ERROR_NOTICE){ $this->_errors['notices'][] = $msg; return true; }else{ $this->_errors['errors'][] = $msg; return false; } } /* * create an image with the given error or with the consigned errors * * @param string $test the error message * * @return void * @access private */ function _getErrorImage($text = ''){ if(!$this->_gdIsLoaded){ $this->_gdIsNotLoaded(); return false; }elseif(empty($text)) $text = $this->getErrors(true); $errors = explode("\n",$text); $nbe = count($errors); $width = ($this->imgInfos['width'] < 300) ? 300 : $this->imgInfos['width']; $height = (30*$nbe)+60; $finalheight = ($this->imgInfos['height'] < $height) ? $height : $this->imgInfos['height']; $eImg = imagecreate($width,$finalheight); $bg = imagecolorallocate($eImg, 255, 255, 255); $textcolor = imagecolorallocate($eImg, 255, 0, 0); for($i=0,$j=30;$i<$nbe;$i++,$j+=10) imagestring($eImg, 2, 30, $j, trim($errors[$i]), $textcolor); if($this->_isSupported('jpeg','write')){ header("Content-type: image/jpeg"); imagejpeg($eImg); }elseif($this->_isSupported('gif','write')){ header("Content-type: image/gif"); imagegif($eImg); }elseif($this->_isSupported('png','write')){ header("Content-type: image/png"); imagepng($eImg); } } function _gdIsNotLoaded(){ header("Content-type: image/jpeg"); echo base64_decode('/9j/4AAQSkZJRgABAQAAAQABAAD//gA+Q1JFQVRPUjogZ2QtanBlZyB2MS4'. 'wICh1c2luZyBJSkcgSlBFRyB2NjIpLCBkZWZhdWx0IHF1YWxpdHkK/9sAQwAIBgYHBgUIBwcHCQkIC'. 'gwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCMcHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQk'. 'MCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM'. 'jIy/8AAEQgAZAEsAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALU'. 'QAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXG'. 'BkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5S'. 'VlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29'. '/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwA'. 'BAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDR'. 'EVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrK'. 'ztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A9'. '/ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii'. 'igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAC'. 'iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigArL1+WSLSx5UjRmW5t4WZDtbY8'. 'yIwBHIJViMjkdQQa1KZLFHPC8M0ayRSKVdHGVYHggg9RSkrpo0pSUJxk+jRyUMcV74iTSvP1aO3tVu'. 'g0b30isWH2YqQ6PuZcSkjeSRuI4wAN/QLqa98OaXd3D7557SKSRsAbmZAScDjqaJNA0aa3ht5NIsHg'. 'g3eVG1shWPccnaMYGTycVo1EINO7OnEYiFSCjG+nf5/nfX03e5jaX5/2nX4Yp23Je4hM7NKsZaCJsY'. 'LZ27mJ2ggc4GKyLfUb+4bwuLe5gglvtKkci4d3UtiBuFLbpGA3dWyAWOTgg9KmladH9q8uwtV+15+0'. '7YVHnZznfx83U9fU0w6LpRtFtDplmbZVKrCYF2AFgxAXGMFlB+oB7UnCVv67lRxNJSu1fbov5Wr+eu'. 'tv8zJ0PWtV13ddRQ2cNmjQ5iYsZGEkEUhG7oCvmHBwd3TCY3HOfxfqAu/KgggmW5WKeyaVREGheeKN'. 'SdsjthhLkMVTBU/KeQOySKONpGSNVaRtzlRgscAZPqcAD6AVXXStOR2dbC1DtIZSwhUEuWVi3TqWRD'. 'n1UHsKThO2jHDE4dTblT000/wCDvv1+XpnSard6XeW0WrSWvkSRy/6RDG6+ZIDHsRUJJ3kNJhAWLbM'. 'juovaLeSajoWn30yqstzbRzOEGFBZQTjPbmn31k975ai+uraMZEiQFV80HHBYqWXvypU89c4xYiijg'. 'hSGGNY4o1CoiDCqBwAAOgq0mpeRhUnTlSVl73X8fLz6aadDDS/vYo9dIMD3EF6sUG5iqndHEVGGfG7'. '5wAoKBm/u7iavaNd3F3ZubsxfaI5DHIEQoVOAcMhLbSM9mYEYYHDCpk0rTo/tXl2Fqv2vP2nbCo87O'. 'c7+Pm6nr6mpbW1t7K3S3tLeKCBM7Y4kCKuTk4A46kmiMZJjq1aUoNJa6a/JJ/j08zDm1nUYtRvDstf'. 'sNrfwWe3DeZJ5ohGc5wu0y56HcOMLjcczUNc1Wfw1PMJoIWvtHm1C3aKNla3CqhKFt/zNiUYcbcFc7'. 'TnA682tu2/dbxHfIsr5QfM642sfUjauD22j0ptvp9lZzTzW1pBBLcNumeKMK0h5OWIHJ5PX1NS4SfU'. '2p4qjCz5NVb52X+ev4bBZvIYTHPcwT3MTbZmgTYoP3gNpZip2lTye+e9U5Z508U2lvuU28llO4Ubgw'. 'ZXiHPzbSCHHVcjBwfmIq9a2tvZW6W9pbxQQJnbHEgRVycnAHHUk019PspL6O+e0ga8jXalw0YMijng'. 'NjIHJ/M1bTsjmjOCnJvZp9F1X4fL0OatPEOryadZTTx2Hn6hYC6gRCVCNmJdpLMA5YzAhcpgjbuOd4'. 'Jr7Wbp9HWO8tbe4+3yQzqbd+v2eRwrxiTjGDxuYN8jhsYB6U6fZGFYTaQGJYTAqGMbRGcAoBj7p2jj'. 'pwPSmf2Vp39nf2f8AYLX7D/z7eSvl9d33cY68/Ws/Zy6s6vrVFO8YWevRbO669lbTq9W76mHf+J3g1'. 'S1+xmK40+SeC1dwq4Mku0ja5kBPyOj4WNgRn5hyVvaXGZbnX7aSadovtu1czvuQNBExCtnKjLMRgjG'. 'eMVoyafZTXIuZbSB7gKqiVowWwGDAZxnAYBh7jNMTStOj+1eXYWq/a8/adsKjzs5zv4+bqevqarlle'. '7M3Xo+z5Yqztb8U7/n95zUGsasmheHILGFrq8u9OW4lldVlbCrGDkNLHkkyA53Z46HOQX+t6lKse8Q'. 'WIXUbK0ltzKfN8xzDI4VwcMMOUK45AZt2Plron0XSpLGOxfTLNrONtyW7QKY1PPIXGAeT+ZqaTT7Ka'. '5FzLaQPcBVUStGC2AwYDOM4DAMPcZqfZzta5ssXQUubk6t+e911ttptoSyiQwuIXVJSp2M67lB7EgE'. 'ZHtkfWubstU1O6s/D8Fn9lje90w3Mss4kl8sqIeg3ZfPmEctnvk4w3SSxRzwvDNGskUilXRxlWB4II'. 'PUVFbafZWaxLa2kECxKyxiKMKEDEFgMDgEgE+pAq5RbehyUasIRfMrv/gNfm0/kM0q+/tPSLK/8vy/'. 'tUEc2zdnbuUHGe+M1zQ8XzyR6dDGsBvJ7ZftS7G229w0sEW089VMzFo87uFBK5yetiijghSGGNY4o1'. 'CoiDCqBwAAOgqjBo8S+a15PLqMkkZiL3aocRnqgVVVcHvxk4GSQBhSU2kkzSjUoRlKU43V9F9/9bmd'. 'aa7cJrMun372oS1jnae5VTGp2LbuGwWO0BZyDkn7ucjpUXh7WdZ1uJbkpYJAnkeYuHDP5kEUjYOSF2'. 'mQkfe3cD5cbjuLpWnJbwW6WFqsFvIJYYxCoWNwSQyjGAcknI9TUtva29ohS2t4oUOMrGgUcKFHT0VV'. 'H0AHakoSvq9CpV6HI1GGr6/PV26X/AA6EWp3E1rp0stuIjPwsYlYAFiQAOSASSeFyuTgZXORjW/iKe'. 'CaBdTaBIysySssTI4mXyykWzLYch3wql94UMpIOK6GWKOeF4Zo1kikUq6OMqwPBBB6iqMmjxC3htbO'. 'eXT7SPcDBZKkauCckZ25XvyhU8k5zghyUr3RFCdFR5ai+fy76/LS3cxtO8QaleDTbiQWaWs8Nv5pAJ'. 'XzZEVihffmNvnyqshDfKN4LgCG01fUtP0G5luLmC9vHvZYbaFYyr5+1mEnDSfMoLphcqAMKW53V0q6'. 'VpyXEFwlharPbxiKGQQqGjQAgKpxkDBIwPU086fZM1yxtIC10oW4JjGZgBgB+PmGCRz2qVCXc2eKoX'. 'soaXT2XRvT8d9+mxy83iDXraSzgurSC3lmZlJljBLgyQRI4VJWCgNOSRuJYR9V3cdLpV9/aekWV/wC'. 'X5f2qCObZuzt3KDjPfGafbafZWaxLa2kECxKyxiKMKEDEFgMDgEgE+pAqWKKOCFIYY1jijUKiIMKoH'. 'AAA6CqjGSerMa9alUglGFnfdad+mvl18tijpv2j7fq/n+b5f2tfI35xs8iLO3Pbdu6d8980aB9o/wC'. 'Ec0v7Z5v2r7JF53nZ379g3bs85znOavJFHG0jJGqtI25yowWOAMn1OAB9AKIoo4IUhhjWOKNQqIgwq'. 'gcAADoKpRszKdVSi1bt+CsPoooqjEKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK'. 'KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo'. 'AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo'. 'ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA'. 'ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii'. 'gAooooAKKKKACiiigAooooAKKKKACiiigAooooA//2Q=='); } /* * Check if the given color is an rgb color array * * @param array $color the color to test * * @return bool * @access private */ function _isRgbColor($color){ if(!isset($color['red'],$color['green'],$color['blue'])) return false; return ($color['red'] < 255 && $color['red'] > 0 && $color['green'] < 255 && $color['green'] > 0 && $color['blue'] < 255 && $color['blue'] > 0); } /* * convert an hex color to an rgb color array * * @param array $color the color to convert * * @return array * @access private */ function _hex2rgb($hex){ $hex = strtr($hex,'#',''); if(strlen($hex) === 3) return array('red' => hexdec($color{0}.$color{0}),'green' => hexdec($color{1}.$color{1}),'blue' => hexdec($color{2}.$color{2})); else return array('red' => hexdec(substr($hex,0,2)),'green' => hexdec(substr($hex,2,2)),'blue' => hexdec(substr($hex,4,2))); } } ?>
example.php
<?php require('class.gd2.php'); $gd = new Gd2("DSC_0096.jpg"); if(isset($_GET['op'])) { if($gd->useGdFilters) { switch((int)$_GET['op']) { case 1: $gd->resizeImage(150,150); break; case 2: $gd->maxSizeThumbnail(150); break; case 3: $gd->oneSizeThumbnail(150); break; case 4: $gd->cropImage(200,200,50,50); break; case 5: $gd->imageRotate(90); break; case 6: $gd->mirror(); break; case 7: $gd->effectBrightness(50); break; case 8: $gd->effectSmooth(2); break; case 9: $gd->effectEmboss(); break; case 10: $gd->effectGaussianBlur(); break; case 11: $gd->effectMeanRemoval(); break; case 12: $gd->effectNegate(); break; case 13: $gd->effectGrayscale(); break; case 14: $gd->effectEdgeDetect(); break; case 15: $gd->effectSelectiveBlur(); break; case 16: $gd->effectContrast(-30); break; case 17: $gd->effectColorize('#00ff00'); break; case 18: $gd->createFromFile('DSC.jpg'); break; } } else { switch((int)$_GET['op']) { case 1: $gd->resizeImage(150,150); break; case 2: $gd->maxSizeThumbnail(150); break; case 3: $gd->oneSizeThumbnail(150); break; case 4: $gd->cropImage(200,200,50,50); break; case 5: $gd->imageRotate(90); break; case 6: $gd->mirror(); break; case 7: $gd->createFromFile('DSC.jpg'); break; } } $gd->display('png'); } else { ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>-[Gd2 Class Demo]-</title> <style type="text/css"> body { background-color:#e2e2e2; } th { background-color:#c0c0c0;text-align:center; } img { margin-left:auto;margin-right:auto;border:none; } table { margin-left:auto;margin-right:auto;text-align:center; } .main { width:90%;border:1px solid #000000;padding:0px; } .sub { width:100%;border:none; } .cObj { width:90%;border:1px solid #000000;margin-left:auto;margin-right:auto;text-align:left; } pre { margin-left:30%; } .cObj th, .main th { font-size:28px; } .sub th { font-size:16px;padding:5px; } .sub td { padding:10px; } </style> </head> <body> <?php $tests = array( '', '$gd->resizeImage(150,150);', '$gd->maxSizeThumbnail(150);', '$gd->oneSizeThumbnail(150);', '$gd->cropImage(200,200,50,50);', '$gd->imageRotate(90);', '$gd->mirror();' ); if($gd->useGdFilters) { $tests[] = '$gd->effectBrightness(50);'; $tests[] = '$gd->effectSmooth(30);'; $tests[] = '$gd->effectEmboss();'; $tests[] = '$gd->effectGaussianBlur();'; $tests[] = '$gd->effectMeanRemoval();'; $tests[] = '$gd->effectNegate();'; $tests[] = '$gd->effectGrayscale();'; $tests[] = '$gd->effectEdgeDetect();'; $tests[] = '$gd->effectSelectiveBlur();'; $tests[] = '$gd->effectContrast(-30);'; $tests[] = '$gd->effectColorize(\'#00ff00\');'; } $tests[] = 'Error simulation'; $nb = count($tests); echo '<table class="main"> <tr> <th>Gd2 class demo samples</th> </tr> <tr> <td> <br /> <img src="DSC_0096.jpg" width="'.$gd->imgInfos['width'].'" height="'.$gd->imgInfos['height'].'" /> <br /> ( Original Image ) </td> </tr> <tr> <td> <table class="sub">'; for($i=1;$i<$nb;$i+=2) { echo'<tr> <th>'.$tests[$i].'</th><th>'.(isset($tests[$i+1]) ? $tests[$i+1] : '').'</th> </tr> <tr> <td><img src="?op='.$i.'" /></td><td>'.(isset($tests[$i+1]) ? '<img src="?op='.($i+1).'" />' : '').'</td> </tr>'; } echo '</table> </td> </tr> </table> <table class="cObj"> <tr> <th>Gd2 Class Object</th> </tr> <tr> <td> <br /> <pre>'.print_r($gd,true).'</pre> </td> </tr> </table> <br /> </body> </html>'; $gd->destroy(); } ?>