It's fairy easy, you need to do a couple of things:
-Check if there's an uploaded file
-Read imageproperties drom this file
-Create a thumbnail and save it to disk
-Create an image and save it to disk
(-Store the images location in your database)
That's about it.. Well, that's how I do it 😉 As you can see I don't store the images in my database, just the path to the images. Reason for this is I don't want to load my database too heavely.
Anyway, here's the script I am using:
HTML page/ form:
<FORM action="_ssi/uploadscript.php" encType="multipart/form-data" method="post" name="sendform">
<INPUT name=MAX_FILE_SIZE type=hidden value=2000000 />
<INPUT maxLength=128 name=image type=file ACCEPT="image/gif, image/jpeg, image/jpg">
<br>
<INPUT name=Submit type=submit value="sla foto op">
</FORM>
And the script this form is posting to:
<?PHP
/*
declare global variables
names speak for themselves
*/
$IMG_ORG_HEIGHT = "140"; #Width of original image stored on server (new image size)
$IMG_ORG_WIDTH = "140"; #Height of original image stored on server
$IMG_HEIGHT = 140; # Accepted height of resized image (thumbnail size)
$IMG_WIDTH = 140; # Accepted width of resized image
$IMG_ROOT = "../_img/_user"; # Relative path to folder where uploaded images will be stored; no ending slash!
$use_imagecreatetruecolor = true; # these flags enble ImageCreateTrueColor(); ImageCopyResampled();
$use_imagecopyresampled = true; # You need GD2.0.1+ support!
$JPG_QUALITY = 50; # output jpeg quality
/*
get fileinfo and upload file
*/
if(!@$HTTP_POST_FILES ["image"]["tmp_name"] || @$HTTP_POST_FILES ["image"]["tmp_name"] =="none")
{
header("location: ../upload.php");
exit;
}
if( ! $f_org = resizer_main("image","",$IMG_ORG_WIDTH,$IMG_ORG_HEIGHT))
{
header("location: ../upload.php");
exit;
}
if( ! $f_res = resizer_main("image","thumb_",$IMG_WIDTH,$IMG_HEIGHT))
{
header("location: ../upload.php");
exit;
}
/*
store filenames in tblImage for logged in user
*/
include("misc.php");
session_start();
$iUserID = $_SESSION['userID'];
$sql = "INSERT INTO tblImage (userID, imageName, imageThumb) VALUES ($iUserID, '$f_org', '$f_res')";
$DB = new clDatabase();
$DB->fnDBConnect();
$objResultset = mysql_query($sql);
$DB->fnDBClose();
header('location: ../upload.php');
/*
upload and resize functions
*/
function resizer_main($image, $dest_file_prefix,$w, $h){
//image_name = uploaded image. Name or your file field in your form.
//w,h - width and height to fit image in
global $use_imagecreatetruecolor, $use_imagecopyresampled, $IMG_ROOT, $JPG_QUALITY, $HTTP_POST_FILES;
$image_name = $HTTP_POST_FILES [$image]["name"];
$image = $HTTP_POST_FILES [$image]["tmp_name"];
if(trim($image) == "" || trim($image) =="none") return false;
$arr_img = image_from_upload($image);
if( $arr_img["w"] != $w && $arr_img["h"] != $h){
$wh = get_sizes($arr_img["w"], $arr_img["h"], $w, $h);
$img_res = img_get_resized(
$arr_img["img"],
$arr_img["w"], $arr_img["h"],
$wh["w"], $wh["h"],
$use_imagecreatetruecolor,
$use_imagecopyresampled);
} else {
//wow it is exactly like needed!!!
$img_res = $arr_img["img"];
}
$file_name = make_filename($image_name, $dest_file_prefix);
ImageJPEG($img_res,"$IMG_ROOT/$dest_file_prefix$file_name", $JPG_QUALITY);
ImageDestroy($img_res);
return "$dest_file_prefix$file_name";
}
function image_from_upload($uploaded_file){
$img_sz = getimagesize( $uploaded_file ); // returns array with some properties like dimensions and type;
/*
Now create original image from uploaded file. GIF is not supported from GD 1.6
*/
switch( $img_sz[2] ){
case 1:
$img_type = "GIF";
$img = ImageCreateFromGif($uploaded_file);
break;
case 2:
$img = ImageCreateFromJpeg($uploaded_file);
$img_type = "JPG";
break;
case 3:
$img = ImageCreateFromPng($uploaded_file);
$img_type = "PNG";
break;
case 4:
$img = ImageCreateFromSwf($uploaded_file);
$img_type = "SWF";
break;
default: die("<br><font color=\"red\"><b>Sorry, this image type is not supported yet.</b></font><br>");
}
return array("img"=>$img, "w"=>$img_sz[0], "h"=>$img_sz[1], "type"=>$img_sz[2], "html"=>$img_sz[3]);
}
function get_sizes($src_w, $src_h, $dst_w,$dst_h ){
//src_w ,src_h-- start width and height
//dst_w ,dst_h-- end width and height
//return array w=>new width h=>new height mlt => multiplier
//the function tries to shrink or enalrge src_w,h in such a way to best fit them into dst_w,h
//keeping x to y ratio unchanged
//dst_w or/and dst_h can be "*" in this means that we dont care about that dimension
//for example if dst_w="*" then we will try to resize by height not caring about width
//(but resizing width in such a way to keep the xy ratio)
//if both = "*" we dont resize at all.
#### Calculate multipliers
$mlt_w = $dst_w / $src_w;
$mlt_h = $dst_h / $src_h;
$mlt = $mlt_w < $mlt_h ? $mlt_w:$mlt_h;
if($dst_w == "*") $mlt = $mlt_h;
if($dst_h == "*") $mlt = $mlt_w;
if($dst_w == "*" && $dst_h == "*") $mlt=1;
#### Calculate new dimensions
$img_new_w = round($src_w * $mlt);
$img_new_h = round($src_h * $mlt);
return array("w" => $img_new_w, "h" => $img_new_h, "mlt_w"=>$mlt_w, "mlt_h"=>$mlt_h, "mlt"=>$mlt);
}
function img_get_resized($img_original,$img_w,$img_h,$img_new_w,$img_new_h,$use_imagecreatetruecolor=false, $use_imagecopyresampled=false){
//$img_original, -- image to be resized
//$img_w, -- its width
//$img_h, -- its height
//$img_new_w, -- resized width
//$img_new_h -- height
//$use_imagecreatetruecolor, $use_imagecopyresampled allow use of these function
//if they exist on the server
if( $use_imagecreatetruecolor && function_exists("imagecreatetruecolor")){
$img_resized = imagecreatetruecolor($img_new_w,$img_new_h) or die("<br><font color=\"red\"><b>Failed to create destination image.</b></font><br>");
} else {
$img_resized = imagecreate($img_new_w,$img_new_h) or die("<br><font color=\"red\"><b>Failed to create destination image.</b></font><br>");
}
if($use_imagecopyresampled && function_exists("imagecopyresampled")){
imagecopyresampled($img_resized, $img_original, 0, 0, 0, 0,$img_new_w, $img_new_h, $img_w,$img_h) or die("<br><font color=\"red\"><b>Failed to resize @ ImageCopyResampled()</b></font><br>");
}else{
imagecopyresized($img_resized, $img_original, 0, 0, 0, 0,$img_new_w, $img_new_h, $img_w,$img_h) or die("<br><font color=\"red\"><b>Failed to resize @ ImageCopyResized()</b></font><br>");
}
return $img_resized;
}
function make_filename($image_name){
## creates unique name, here I assume that it will never happen that in same second
## two files with same name on user's site will be uploaded. However you can use your
## ways to generate unique name. Function unqueid() for example.
$file_name = time()."_$image_name";
#kick the original extension
$pos = strrpos($file_name, '.');
//Oopz, hardcoded .jpg extension ;)
$file_name = substr($file_name, 0,$pos).".jpg";
return $file_name;
}
?>
There are loads and loads of functions you can use for image creation/ manipulation. Just check www.php.net and search for Image in the manual 🙂