Image Destroy
| From: | Tom Chubb | Date: | Tue, 15 Aug 2006 10:45:22 +0000 |
| Subject: | Image Destroy | ||
| Groups: | php.general | ||
| Request: | Send a blank email to php-general+get-240695@lists.php.net to get a copy of this message | ||
I know this will be really simple, but I'm struggling to get my head round
the use of imagedestroy()
I have some code which uploads an image, resizes to create a smaller image
and thumbnail then deletes the source image.
My question is which images need to be destroyed?
I've read the even reusing a variable name still keeps the old one in
memory.
Here is the code...
$image1 = basename($_FILES['image1']['name']);
$image2 = basename($_FILES['image2']['name']);
$image3 = basename($_FILES['image3']['name']);
$uploaddir = '/home/public_html/images/upload/';
$uploadfile1 = $uploaddir . basename($_FILES['image1']['name']);
$uploadfile2 = $uploaddir . basename($_FILES['image2']['name']);
$uploadfile3 = $uploaddir . basename($_FILES['image3']['name']);
// echo '<pre>';
if (move_uploaded_file($_FILES['image1']['tmp_name'], $uploadfile1)) {
echo "Image1 is valid, and was successfully uploaded.\n";
} else {
echo "Possible file upload attack!\n";
echo "<BR>";
}
// echo '<pre>';
if (move_uploaded_file($_FILES['image2']['tmp_name'], $uploadfile2)) {
echo "Image2 is valid, and was successfully uploaded.\n";
} else {
echo "Possible file upload attack!\n";
echo "<BR>";
}
// echo '<pre>';
if (move_uploaded_file($_FILES['image3']['tmp_name'], $uploadfile3)) {
echo "Image3 is valid, and was successfully uploaded.\n";
} else {
echo "Possible file upload attack!\n";
echo "<BR>";
}
echo "Car inserted into database";
// Now Resize Images
/* resizeToFile resizes a picture and writes it to the harddisk
*
* $sourcefile = the filename of the picture that is going to be resized
* $dest_x = X-Size of the target picture in pixels
* $dest_y = Y-Size of the target picture in pixels
* $targetfile = The name under which the resized picture will be stored
* $jpegqual = The Compression-Rate that is to be used
*/
function resizeToFile ($sourcefile, $dest_x, $dest_y, $targetfile,
$jpegqual)
{
/* Get the dimensions of the source picture */
$picsize=getimagesize("$sourcefile");
$source_x = $picsize[0];
$source_y = $picsize[1];
$source_id = imageCreateFromJPEG("$sourcefile");
/* Create a new image object (not neccessarily true colour) */
$target_id=imagecreatetruecolor($dest_x, $dest_y);
/* Resize the original picture and copy it into the just created image
object. Because of the lack of space I had to wrap the parameters to
several lines. I recommend putting them in one line in order keep your
code clean and readable */
$target_pic=imagecopyresampled($target_id,$source_id,
0,0,0,0,
$dest_x,$dest_y,
$source_x,$source_y);
/* Create a jpeg with the quality of "$jpegqual" out of the
image object "$target_pic".
This will be saved as $targetfile */
imagejpeg ($target_id,"$targetfile",$jpegqual);
return true;
}
//Set Quality to Max
$jpegqual = '100';
//Resize Main Image
$sourcefile = $uploadfile1;
$targetfile = $uploaddir . 'main_' . basename($_FILES['image1']['name']);
$dest_x = '570';
$dest_y = '428';
resizeToFile ($sourcefile, $dest_x, $dest_y, $targetfile, $jpegqual);
$sourcefile = $uploadfile2;
$targetfile = $uploaddir . 'main_' . basename($_FILES['image2']['name']);
$dest_x = '570';
$dest_y = '428';
resizeToFile ($sourcefile, $dest_x, $dest_y, $targetfile, $jpegqual);
$sourcefile = $uploadfile3;
$targetfile = $uploaddir . 'main_' . basename($_FILES['image3']['name']);
$dest_x = '570';
$dest_y = '428';
resizeToFile ($sourcefile, $dest_x, $dest_y, $targetfile, $jpegqual);
//Create Thumbnails
$sourcefile = $uploadfile1;
$targetfile = $uploaddir . 'thumb_' . basename($_FILES['image1']['name']);
$dest_x = '120';
$dest_y = '90';
resizeToFile ($sourcefile, $dest_x, $dest_y, $targetfile, $jpegqual);
$sourcefile = $uploadfile2;
$targetfile = $uploaddir . 'thumb_' . basename($_FILES['image2']['name']);
$dest_x = '120';
$dest_y = '90';
resizeToFile ($sourcefile, $dest_x, $dest_y, $targetfile, $jpegqual);
$sourcefile = $uploadfile3;
$targetfile = $uploaddir . 'thumb_' . basename($_FILES['image3']['name']);
$dest_x = '120';
$dest_y = '90';
resizeToFile ($sourcefile, $dest_x, $dest_y, $targetfile, $jpegqual);
//Delete Uploaded Source Files as no longer required
if(file_exists($uploadfile1))
unlink($uploadfile1);
if(file_exists($uploadfile2))
unlink($uploadfile2);
if(file_exists($uploadfile3))
unlink($uploadfile3);
Should I be using imagedestroy($sourcefile) each time I create an image or
imagedestroy($targetfile) or both?
Many thanks in advance.
Tom