create('FurnitureSet',array('type' => 'file')); ?> * * In view where you upload the image, make sure that you have a file input similar to the following * file('Image/name1'); ?> * * In the controller, add the component to your components array * var $components = array("Image"); * * In your controller action (the parameters are expained below) * $image_path = $this->Image->upload_image_and_thumbnail($this->data,"name1",573,80,"sets",true); * this returns the file name of the result image. You can store this file name in the database * * Note that your image will be stored in 2 locations: * Image: /webroot/img/$folderName/big/$image_path * Thumbnail: /webroot/img/$folderName/small/$image_path * * Finally in the view where you want to see the images * image('sets/big/'.$furnitureSet['FurnitureSet']['image_path']); * where "sets" is the folder name we saved our pictures in, and $furnitureSet['FurnitureSet']['image_path'] is the file name we stored in the database * Parameters: * $data: CakePHP data array from the form * $datakey: key in the $data array. If you used file('Image/name1'); ?> in your view, then $datakey = name1 * $imgscale: the maximum width or height that you want your picture to be resized to * $thumbscale: the maximum width or height that you want your thumbnail to be resized to * $folderName: the name of the parent folder of the images. The images will be stored to /webroot/img/$folderName/big/ and /webroot/img/$folderName/small/ * $square: a boolean flag indicating whether you want square and zoom cropped thumbnails, or thumbnails with the same aspect ratio of the source image */ function upload_image_and_thumbnail($data, $datakey, $imgscale, $thumbscale, $folderName, $square) { if (strlen($data['Image'][$datakey]['name'])>4){ $error = 0; $tempuploaddir = "img/temp"; // the /temp/ directory, should delete the image after we upload $biguploaddir = "img/".$folderName."/big"; // the /big/ directory $smalluploaddir = "img/".$folderName."/small"; // the /small/ directory for thumbnails // Make sure the required directories exist, and create them if necessary if(!is_dir($tempuploaddir)) mkdir($tempuploaddir,true); if(!is_dir($biguploaddir)) mkdir($biguploaddir,true); if(!is_dir($smalluploaddir)) mkdir($smalluploaddir,true); $filetype = $this->getFileExtension($data['Image'][$datakey]['name']); $filetype = strtolower($filetype); if (($filetype != "jpeg") && ($filetype != "jpg") && ($filetype != "gif") && ($filetype != "png")) { // verify the extension return; } else { // Get the image size $imgsize = GetImageSize($data['Image'][$datakey]['tmp_name']); } // Generate a unique name for the image (from the timestamp) $id_unic = str_replace(".", "", strtotime ("now")); $filename = $id_unic; settype($filename,"string"); $filename.= "."; $filename.=$filetype; $tempfile = $tempuploaddir . "/$filename"; $resizedfile = $biguploaddir . "/$filename"; $croppedfile = $smalluploaddir . "/$filename"; if (is_uploaded_file($data['Image'][$datakey]['tmp_name'])) { // Copy the image into the temporary directory if (!copy($data['Image'][$datakey]['tmp_name'],"$tempfile")) { print "Error Uploading File!."; exit(); } else { /* * Generate the big version of the image with max of $imgscale in either directions */ $this->resize_img($tempfile, $imgscale, $resizedfile); if($square) { /* * Generate the small square version of the image with scale of $thumbscale */ $this->crop_img($tempfile, $thumbscale, $croppedfile); } else { /* * Generate the big version of the image with max of $imgscale in either directions */ $this->resize_img($tempfile, $thumbscale, $croppedfile); } // Delete the temporary image unlink($tempfile); } } // Image uploaded, return the file name return $filename; } } /* * Deletes the image and its associated thumbnail * Example in controller action: $this->Image->delete_image("1210632285.jpg","sets"); * * Parameters: * $filename: The file name of the image * $folderName: the name of the parent folder of the images. The images will be stored to /webroot/img/$folderName/big/ and /webroot/img/$folderName/small/ */ function delete_image($filename,$folderName) { unlink("img/".$folderName."/big/".$filename); unlink("img/".$folderName."/small/".$filename); } function crop_img($imgname, $scale, $filename) { $filetype = $this->getFileExtension($imgname); $filetype = strtolower($filetype); switch($filetype){ case "jpeg": case "jpg": $img_src = ImageCreateFromjpeg ($imgname); break; case "gif": $img_src = imagecreatefromgif ($imgname); break; case "png": $img_src = imagecreatefrompng ($imgname); break; } $width = imagesx($img_src); $height = imagesy($img_src); $ratiox = $width / $height * $scale; $ratioy = $height / $width * $scale; //-- Calculate resampling $newheight = ($width <= $height) ? $ratioy : $scale; $newwidth = ($width <= $height) ? $scale : $ratiox; //-- Calculate cropping (division by zero) $cropx = ($newwidth - $scale != 0) ? ($newwidth - $scale) / 2 : 0; $cropy = ($newheight - $scale != 0) ? ($newheight - $scale) / 2 : 0; //-- Setup Resample & Crop buffers $resampled = imagecreatetruecolor($newwidth, $newheight); $cropped = imagecreatetruecolor($scale, $scale); //-- Resample imagecopyresampled($resampled, $img_src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); //-- Crop imagecopy($cropped, $resampled, 0, 0, $cropx, $cropy, $newwidth, $newheight); // Save the cropped image switch($filetype) { case "jpeg": case "jpg": imagejpeg($cropped,$filename,80); break; case "gif": imagegif($cropped,$filename,80); break; case "png": imagepng($cropped,$filename,80); break; } } function resize_img($imgname, $size, $filename) { $filetype = $this->getFileExtension($imgname); $filetype = strtolower($filetype); switch($filetype) { case "jpeg": case "jpg": $img_src = ImageCreateFromjpeg ($imgname); break; case "gif": $img_src = imagecreatefromgif ($imgname); break; case "png": $img_src = imagecreatefrompng ($imgname); break; } $true_width = imagesx($img_src); $true_height = imagesy($img_src); if ($true_width>=$true_height) { $width=$size; $height = ($width/$true_width)*$true_height; } else { $width=$size; $height = ($width/$true_width)*$true_height; } $img_des = ImageCreateTrueColor($width,$height); imagecopyresampled ($img_des, $img_src, 0, 0, 0, 0, $width, $height, $true_width, $true_height); // Save the resized image switch($filetype) { case "jpeg": case "jpg": imagejpeg($img_des,$filename,80); break; case "gif": imagegif($img_des,$filename,80); break; case "png": imagepng($img_des,$filename,80); break; } } function getFileExtension($str) { $i = strrpos($str,"."); if (!$i) { return ""; } $l = strlen($str) - $i; $ext = substr($str,$i+1,$l); return $ext; } } ?>