Solved

Gallery problem with large size photos

Posted on 2007-03-24
4
690 Views
Last Modified: 2013-12-04
In my photo gallery that I created, I use an upload form.  Everthing's working fine so far.  I upload a photo, an automatiic thumbnail is generated, placed in my gallery and when you click on it, the larger size opens.  ALL FINE.  BUT, when I try to upload a photo that's larger in size, say that outputted from a digital camera (2.11 MB and 2592pixels x 1728pixels) the photo IS STILL UPLOADED, but the thumbnail will not appear (only an "x" as a place holder) and when you click on it the full size image is HUGE. My php.ini file must be correct in that it's allowing it to upload, but I think something's incorrect in my script that won't resize the thumbnail and full size image correctly for these larger size photos.  ACTUALLY, I just checked my "photos" folder in my directory (where I'm uploading the photos to) and the thumbnai is NOT being generated for this size of an image.  Can you look through my code and see if you can tell where the problem might be?  This is my "upload.php" file.

ALSO, I read somewhere that I migt have to add a "ini_set()" somewhere in my php.ini file, so when the photo uploads it read this script just for that moment to allow the file size to show up correctly?  Is that wrong?

<?php

// initialization
$result_final = "";
$counter = 0;

// List of our known photo types
$known_photo_types = array(
'image/pjpeg' => 'jpg',
'image/jpeg' => 'jpg',
'image/bmp' => 'bmp',
'image/x-png' => 'png');
       
// GD Function Suffix List
$gd_function_suffix = array(
'image/pjpeg' => 'JPEG',
'image/jpeg' => 'JPEG',
'image/bmp' => 'WBMP',
'image/x-png' => 'PNG');
                              
// Fetch the photo array sent by preupload.php
$photos_uploaded = $_FILES['photo_filename'];

// Fetch the photo caption array
$photo_caption = $_POST['photo_caption'];

while( $counter <= count($photos_uploaded) )
        {
                if($photos_uploaded['size'][$counter] > 0)
                {
                        if(!array_key_exists($photos_uploaded['type'][$counter], $known_photo_types))
                        {
                                $result_final .= "File ".($counter+1)." is not a photo!<br />";
                        }else{
                                    
mysql_query( "INSERT INTO gallery_photos(`photo_filename`, `photo_caption`, `photo_category`) VALUES('0', '".addslashes($photo_caption[$counter])."', '".addslashes($_POST['category'])."')" );
$new_id = mysql_insert_id();
$filetype = $photos_uploaded['type'][$counter];
$extention = $known_photo_types[$filetype];
$filename = $new_id.".".$extention;

mysql_query( "UPDATE gallery_photos SET photo_filename='".addslashes($filename)."' WHERE photo_id='".addslashes($new_id)."'" );

// Store the orignal file
 copy($photos_uploaded['tmp_name'][$counter], $images_dir."/".$filename);                                          
// Let's get the original image size
                               
$size = GetImageSize( $images_dir."/".$filename );

// First Create Thumbnail!
// Thumbnail Settings
        $Config_tbwidth_wide = 150; // width of wide image
        $Config_tbheight_wide = 125; // height of wide image

        $Config_tbwidth_tall = 125; // width of tall image
        $Config_tbheight_tall = 150; // height of tall image

// The Code
        if($size[0] > $size[1]){
            $thumbnail_width = $Config_tbwidth_wide;
            $thumbnail_height = (int)($Config_tbwidth_wide * $size[1] / $size[0]);

            if($thumbnail_height > $Config_tbheight_wide){
                $thumbnail_height = $Config_tbheight_wide;
                $thumbnail_width = (int)($Config_tbheight_wide * $size[0] / $size[1]);
            }
        }else{
            $thumbnail_width = (int)($Config_tbheight_tall * $size[0] / $size[1]);
            $thumbnail_height = $Config_tbheight_tall;

            if($thumbnail_width > $Config_tbwidth_tall){
                $thumbnail_width = $Config_tbwidth_tall;
                $thumbnail_height = (int)($Config_tbwidth_tall * $size[1] / $size[0]);
            }
        }

// Build Thumbnail with GD 2.x.x, you can use the other described methods too
$function_suffix = $gd_function_suffix[$filetype];
$function_to_read = "ImageCreateFrom".$function_suffix;
$function_to_write = "Image".$function_suffix;

// Read the source file
$source_handle = $function_to_read ( $images_dir."/".$filename );

if($source_handle){
// Let's create a blank image for the thumbnail
$destination_handle = ImageCreateTrueColor ( $thumbnail_width, $thumbnail_height );

// Now we resize it
ImageCopyResampled( $destination_handle, $source_handle, 0, 0, 0, 0, $thumbnail_width, $thumbnail_height, $size[0], $size[1] );
}

// Let's save the thumbnail
$function_to_write( $destination_handle, $images_dir."/tb_".$filename, 100 );
ImageDestroy($destination_handle );

// Lets resize the image if its width is greater than 500 pixels
// Resized image settings
if ($size[0] > '500'){
        $Config_width_wide = 500; // width of wide image
        $Config_height_wide = 475; // height of wide image

        $Config_width_tall = 375; // width of tall image
        $Config_height_tall = 400; // height of tall image

// The Code
        if($size[0] > $size[1]){
            $image_width = $Config_width_wide;
            $image_height = (int)($Config_width_wide * $size[1] / $size[0]);

            if($image_height > $Config_height_wide){
                $image_height = $Config_height_wide;
                $image_width = (int)($Config_height_wide * $size[0] / $size[1]);
            }
        }else{
            $image_width = (int)($Config_height_tall * $size[0] / $size[1]);
            $image_height = $Config_height_tall;

            if($image_width > $Config_width_tall){
                $image_width = $Config_width_tall;
                $image_height = (int)($Config_width_tall * $size[1] / $size[0]);
            }
        }

// Build image with GD 2.x.x, you can use the other described methods too
$function_suffix = $gd_function_suffix[$filetype];
$function_to_read = "ImageCreateFrom".$function_suffix;
$function_to_write = "Image".$function_suffix;

// Read the source file
$source_handle = $function_to_read ( $images_dir."/".$filename );

if($source_handle){
// Let's create a blank image for the image
$destination_handle = ImageCreateTrueColor ( $image_width, $image_height );

// Now we resize it
ImageCopyResampled( $destination_handle, $source_handle, 0, 0, 0, 0, $image_width, $image_height, $size[0], $size[1] );
}

// Let's save the image
$function_to_write( $destination_handle, $images_dir."/".$filename, 90 );
ImageDestroy($destination_handle );

}

$result_final .= "<img src='".$images_dir. "/tb_".$filename."' /><br />File ".($counter+1)." Added Successfully!<br /><br />";

}
}
$counter++;
}
?>




 
0
Comment
Question by:e4art
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
4 Comments
 
LVL 5

Accepted Solution

by:
sebastienbo earned 500 total points
ID: 18785315
check the outcommings of your width and heights for large images.
echo this image height and width :
// Let's create a blank image for the image
$destination_handle = ImageCreateTrueColor ( $image_width, $image_height );

They should be bigger  then 1 (not zero or negative) or the function will abort and do nothing.

so add the following line
$destination_handle = ImageCreateTrueColor ( $image_width, $image_height );
die("width x height : ". $image_width." x ". $image_height);

this die will echo the width and height and stop the script so that you can check the results, if the numbers are incorrect check you code again
0
 

Author Comment

by:e4art
ID: 18787306
I'm sorry, but I added this line just as you said and it didn't change any results.  I added the following line:

die("width x height : ". $image_width." x ". $image_height);

at the section below:
// Let's create a blank image for the image
$destination_handle = ImageCreateTrueColor ( $image_width, $image_height );

Was I to change the resizing code below it too?  Still having trouble and I would appreciate your advice.
Thanks.
0
 

Author Comment

by:e4art
ID: 18791928
Still not working.  Any solutions?
0
 

Author Comment

by:e4art
ID: 18812362
Anybody available for help with this file size problem?
0

Featured Post

Stressed Out?

Watch some penguins on the livecam!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

FAQ pages provide a simple way for you to supply and for customers to find answers to the most common questions about your company. Here are six reasons why your company website should have a FAQ page
There’s a good reason for why it’s called a homepage – it closely resembles that of a physical house and the only real difference is that it’s online. Your website’s homepage is where people come to visit you. It’s the family room of your website wh…
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
The viewer will learn how to count occurrences of each item in an array.

705 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question