<?php if(!defined('IN_GS')){ die('you cannot load this page directly.'); } /** * Generate standard thumbnails * @param string $path path to image * @param string $name file name */ function genStdThumb($path,$name){ if (!defined('GSIMAGEWIDTH')) { $width = 200; //New width of image } else { $width = GSIMAGEWIDTH; } $ext = lowercase(pathinfo($name,PATHINFO_EXTENSION)); if ($ext == 'jpg' || $ext == 'jpeg' || $ext == 'gif' || $ext == 'png' ) { $thumbsPath = GSTHUMBNAILPATH.$path; if (!(file_exists($thumbsPath))) { if (defined('GSCHMOD')) { $chmod_value = GSCHMOD; } else { $chmod_value = 0755; } echo $thumbsPath; mkdir($thumbsPath, $chmod_value); } } $targetFile = GSDATAUPLOADPATH.$path.$name; //thumbnail for post $imgsize = getimagesize($targetFile); switch(lowercase(substr($targetFile, -3))){ case "jpg": $image = imagecreatefromjpeg($targetFile); break; case "png": $image = imagecreatefrompng($targetFile); break; case "gif": $image = imagecreatefromgif($targetFile); break; default: exit; break; } $height = $imgsize[1]/$imgsize[0]*$width; //This maintains proportions $src_w = $imgsize[0]; $src_h = $imgsize[1]; $picture = imagecreatetruecolor($width, $height); imagealphablending($picture, false); imagesavealpha($picture, true); $bool = imagecopyresampled($picture, $image, 0, 0, 0, 0, $width, $height, $src_w, $src_h); if($bool) { $thumbnailFile = $thumbsPath . "thumbnail." . $name; switch(lowercase(substr($targetFile, -3))) { case "jpg": $bool2 = imagejpeg($picture,$thumbnailFile,85); break; case "png": imagepng($picture,$thumbnailFile); break; case "gif": imagegif($picture,$thumbnailFile); break; } } imagedestroy($picture); imagedestroy($image); } /** * ImageManipulation * * @author Tech @ Talk In Code * @link http://www.talkincode.com/ * @version 1.0 * @copyright 2009 Talk In Code * * @package GetSimple * @subpackage Images */ class ImageManipulation { /** * An array to hold the settings for the image. Default values for * images are set here. * * @var array */ public $image = array('targetx'=>0, 'targety'=>0, 'quality'=>75); /** * A boolean value to detect if an image has not been created. This * can be used to validate that an image is viable before trying * resize or crop. * * @var boolean */ public $imageok = false; /** * Contructor method. Will create a new image from the target file. * Accepts an image filename as a string. Method also works out how * big the image is and stores this in the $image array. * * @param string $imgFile The image filename. */ public function ImageManipulation($imgfile) { //detect image format $this->image["format"] = preg_replace("/.*\.(.*)$/", "\\1", $imgfile); $this->image["format"] = strtoupper($this->image["format"]); // convert image into usable format. if ( $this->image["format"] == "JPG" || $this->image["format"] == "JPEG" ) { //JPEG $this->image["format"] = "JPEG"; $this->image["src"] = ImageCreateFromJPEG($imgfile); } elseif( $this->image["format"] == "PNG" ){ //PNG $this->image["format"] = "PNG"; $this->image["src"] = imagecreatefrompng($imgfile); } elseif( $this->image["format"] == "GIF" ){ //GIF $this->image["format"] = "GIF"; $this->image["src"] = ImageCreateFromGif($imgfile); } elseif ( $this->image["format"] == "WBMP" ){ //WBMP $this->image["format"] = "WBMP"; $this->image["src"] = ImageCreateFromWBMP($imgfile); } else { //DEFAULT return false; } // Image is ok $this->imageok = true; // Work out image size $this->image["sizex"] = imagesx($this->image["src"]); $this->image["sizey"] = imagesy($this->image["src"]); } /** * Sets the height of the image to be created. The width of the image * is worked out depending on the value of the height. * * @param int $height The height of the image. */ public function setImageHeight($height=100) { //height $this->image["sizey_thumb"] = $height; $this->image["sizex_thumb"] = ($this->image["sizey_thumb"]/$this->image["sizey"])*$this->image["sizex"]; } /** * Sets the width of the image to be created. The height of the image * is worked out depending on the value of the width. * * @param int $size The width of the image. */ public function setImageWidth($width=100) { //width $this->image["sizex_thumb"] = $width; $this->image["sizey_thumb"] = ($this->image["sizex_thumb"]/$this->image["sizex"])*$this->image["sizey"]; } /** * This method automatically sets the width and height depending * on the dimensions of the image up to a maximum value. * * @param int $size The maximum size of the image. */ public function resize($size=100) { if ( $this->image["sizex"] >= $this->image["sizey"] ) { $this->image["sizex_thumb"] = $size; $this->image["sizey_thumb"] = ($this->image["sizex_thumb"]/$this->image["sizex"])*$this->image["sizey"]; } else { $this->image["sizey_thumb"] = $size; $this->image["sizex_thumb"] = ($this->image["sizey_thumb"]/$this->image["sizey"])*$this->image["sizex"]; } } /** * This method sets the cropping values of the image. Be sure * to set the height and with of the image if you want the * image to be a certain size after cropping. * * @param int $x The x coordinates to start cropping from. * @param int $y The y coordinates to start cropping from. * @param int $w The width of the crop from the x and y coordinates. * @param int $h The height of the crop from the x and y coordinates. */ public function setCrop($x, $y, $w, $h) { $this->image["targetx"] = $x; $this->image["targety"] = $y; $this->image["sizex"] = $w; $this->image["sizey"] = $h; } /** * Sets the JPEG output quality. * * @param int $quality The quality of the JPEG image. */ public function setJpegQuality($quality=75) { //jpeg quality $this->image["quality"] = $quality; } /** * Shows the image to a browser. Sets the correct image format in a header. */ public function show() { //show thumb header("Content-Type: image/".$this->image["format"]); $this->createResampledImage(); if ( $this->image["format"]=="JPG" || $this->image["format"]=="JPEG" ) { //JPEG imageJPEG($this->image["des"], "", $this->image["quality"]); } elseif ( $this->image["format"] == "PNG" ) { //PNG imagePNG($this->image["des"]); } elseif ( $this->image["format"] == "GIF" ) { //GIF imageGIF($this->image["des"]); } elseif ( $this->image["format"] == "WBMP" ) { //WBMP imageWBMP($this->image["des"]); } } /** * Private method to run the imagecopyresampled() function with the parameters that have been set up. * This method is used by the save() and show() methods. */ private function createResampledImage() { /* change ImageCreateTrueColor to ImageCreate if your GD not supported ImageCreateTrueColor function*/ if ( isset($this->image["sizex_thumb"]) && isset($this->image["sizey_thumb"]) ) { $this->image["des"] = ImageCreateTrueColor($this->image["sizex_thumb"], $this->image["sizey_thumb"]); imagecopyresampled($this->image["des"], $this->image["src"], 0, 0, $this->image["targetx"], $this->image["targety"], $this->image["sizex_thumb"], $this->image["sizey_thumb"], $this->image["sizex"], $this->image["sizey"]); } else { $this->image["des"] = ImageCreateTrueColor($this->image["sizex"], $this->image["sizey"]); imagecopyresampled($this->image["des"], $this->image["src"], 0, 0, $this->image["targetx"], $this->image["targety"], $this->image["sizex"], $this->image["sizey"], $this->image["sizex"], $this->image["sizey"]); } } /** * Saves the image to a given filename, if no filename is given then a default is created. * * @param string $save The new image filename. */ public function save($save="") { //save thumb if ( empty($save) ) { $save = strtolower("./thumb.".$this->image["format"]); } header("Content-Type: image/".$this->image["format"]); $this->createResampledImage(); if ( $this->image["format"] == "JPG" || $this->image["format"] == "JPEG" ) { //JPEG imageJPEG($this->image["des"], $save, $this->image["quality"]); } elseif ( $this->image["format"] == "PNG" ) { //PNG imagePNG($this->image["des"], $save); } elseif ( $this->image["format"] == "GIF" ) { //GIF imageGIF($this->image["des"], $save); } elseif ( $this->image["format"] == "WBMP" ) { //WBMP imageWBMP($this->image["des"], $save); } header("Content-Type: text/html"); } }