Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating a thumbnail from an uploaded image

I'm wanting to create a thumbnail from a user uploaded image so the image doesn't look squashed. But also would like a copy of the original image.. So I would like the original image to send the original image to my server and also create a thumb version and send it to my server so I can call each of them for each user that uploads their own image.

My user table has 2 tables

`user_pic` longblob NOT NULL, `user_pic_small` longblob NOT NULL, 

I'm not crash hot with the image side of coding but this is what I have so far.

Imageupload.php

> <form id="myForm" action="include/media.profileimage.upload.php" > method="POST" enctype="multipart/form-data" target="ifr1"> >                   <input type = "file" name = "image_data" class = "input_text" style="width:800px;" >     >                   <input type = "submit" name = "submit"   class = "btn_login" value = "Upload"> >         </form> 

media.profileimage.upload.php

if(isset($_FILES['image_data'])){        if(is_uploaded_file($_FILES['image_data']['tmp_name'])) {              // prepare the image for insertion                 $imgData =addslashes (file_get_contents($_FILES['image_data']['tmp_name']));              // get the image info..               $size = getimagesize($_FILES['image_data']['tmp_name']);               // our sql query             $creator_id     =   $_SESSION['id'];             $sql = "UPDATE users SET user_pic='".$imgData."' WHERE id=$creator_id";             $sql2 = "INSERT INTO userphotos(photo_ownerid,photo_ispublic, photo_name, photo_caption, photo_imagedata) VALUES ($creator_id,1,'Profile Picture','Profile Picture','$imgData')";              // insert the image             if(!mysql_query($sql)) {                 echo "Fail. It broke.";             }else{             $c=mysql_query($sql2);                  echo "<script> parent.alert('Image Uploaded','',1000);</script>";             }         }     } 

Would appreciate any help or guidence. Thankyou

like image 278
dave Avatar asked Jul 07 '12 15:07

dave


People also ask

How do I create a thumbnail file?

To add a new thumbnail image for a selected file, first click the Add button as shown below in the image. 2. A new window will then appear and show a list that will let you select up to three files at once. Click Select File to select the image file you wish to assign as the thumbnail image file.

How do I make a PDF a thumbnail image?

Settings on Thumbnail and HTML, such as Thumbnail size, border, link, title etc, then click "OK" to save these settings. Click the "Generate" icon, choose Output Mode "Generate thumbnails images only" and select an output folder, click "Generate" finally to create web thumbnails.


1 Answers

UPDATE:

If you want to take advantage of Imagick (if it is installed on your server). Note: I didn't use Imagick's nature writeFile because I was having issues with it on my server. File put contents works just as well.

<?php /**  *   * Generate Thumbnail using Imagick class  *    * @param string $img  * @param string $width  * @param string $height  * @param int $quality  * @return boolean on true  * @throws Exception  * @throws ImagickException  */ function generateThumbnail($img, $width, $height, $quality = 90) {     if (is_file($img)) {         $imagick = new Imagick(realpath($img));         $imagick->setImageFormat('jpeg');         $imagick->setImageCompression(Imagick::COMPRESSION_JPEG);         $imagick->setImageCompressionQuality($quality);         $imagick->thumbnailImage($width, $height, false, false);         $filename_no_ext = reset(explode('.', $img));         if (file_put_contents($filename_no_ext . '_thumb' . '.jpg', $imagick) === false) {             throw new Exception("Could not put contents.");         }         return true;     }     else {         throw new Exception("No valid image provided with {$img}.");     } }  // example usage try {     generateThumbnail('test.jpg', 100, 50, 65); } catch (ImagickException $e) {     echo $e->getMessage(); } catch (Exception $e) {     echo $e->getMessage(); } ?> 

I have been using this, just execute the function after you store the original image and use that location to create the thumbnail. Edit it to your liking...

function makeThumbnails($updir, $img, $id) {     $thumbnail_width = 134;     $thumbnail_height = 189;     $thumb_beforeword = "thumb";     $arr_image_details = getimagesize("$updir" . $id . '_' . "$img"); // pass id to thumb name     $original_width = $arr_image_details[0];     $original_height = $arr_image_details[1];     if ($original_width > $original_height) {         $new_width = $thumbnail_width;         $new_height = intval($original_height * $new_width / $original_width);     } else {         $new_height = $thumbnail_height;         $new_width = intval($original_width * $new_height / $original_height);     }     $dest_x = intval(($thumbnail_width - $new_width) / 2);     $dest_y = intval(($thumbnail_height - $new_height) / 2);     if ($arr_image_details[2] == IMAGETYPE_GIF) {         $imgt = "ImageGIF";         $imgcreatefrom = "ImageCreateFromGIF";     }     if ($arr_image_details[2] == IMAGETYPE_JPEG) {         $imgt = "ImageJPEG";         $imgcreatefrom = "ImageCreateFromJPEG";     }     if ($arr_image_details[2] == IMAGETYPE_PNG) {         $imgt = "ImagePNG";         $imgcreatefrom = "ImageCreateFromPNG";     }     if ($imgt) {         $old_image = $imgcreatefrom("$updir" . $id . '_' . "$img");         $new_image = imagecreatetruecolor($thumbnail_width, $thumbnail_height);         imagecopyresized($new_image, $old_image, $dest_x, $dest_y, 0, 0, $new_width, $new_height, $original_width, $original_height);         $imgt($new_image, "$updir" . $id . '_' . "$thumb_beforeword" . "$img");     } } 

The above function creates images with a uniform thumbnail size. If the image doesn't have the same dimensions as the specified thumbnail size (proportionally), it just has blackspace on the top and bottom.

like image 110
Alex Avatar answered Oct 03 '22 21:10

Alex