I just found this code the other day. Works great. It is written to create thumbnails for an entire directory. Maybe you could modify it for your purposes. I did not see the author's name or any restrictions on its use. Place it in your regular picture directory. Running it will create a thumbnail with the prefix "tn_" for each image and place it in a directory within the regular picture directory called "thumbs". You'd just have to change the name in this line of code to reflect whatever you want your thumb directory called: createthumb($p,"thumbs/tn_".$p,150,150); I don't keep thumb info in my database. Just info for the full-sized images. When I want to work with a thumb I start with the filename of the full-sized image, like this: $ImageFile_thumb = "tn_" . $ImageFileName; Also I could not get this to work without making the thumb directory permissions 777. Here is the code: <?php $imagefolder='.'; $thumbsfolder='.'; $pics=directory($imagefolder,"jpg,JPG,JPEG,jpeg,png,PNG"); $pics=ditchtn($pics,"tn_"); if ($pics[0]!="") { foreach ($pics as $p) { createthumb($p,"thumbs/tn_".$p,150,150); } } //************************** D I T C H T N ***************************** // filters out thumbnails function ditchtn($arr,$thumbname) { foreach ($arr as $item) { if (!preg_match("/^".$thumbname."/",$item)){$tmparr[]=$item;} } return $tmparr; } // ************************ C R E A T E T H U M B ********************** // creates a resized image // variables: // $name Original filename // $filename Filename of the resized image // $new_w width of resized image // $new_h height of resized image function createthumb($name,$filename,$new_w,$new_h) { $system=explode(".",$name); if (preg_match("/jpg|jpeg/",$system[1])){$src_img=imagecreatefromjpeg($name);} if (preg_match("/png/",$system[1])){$src_img=imagecreatefrompng($name);} $old_x=imageSX($src_img); $old_y=imageSY($src_img); if ($old_x > $old_y) { $thumb_w=$new_w; $thumb_h=$old_y*($new_h/$old_x); } if ($old_x < $old_y) { $thumb_w=$old_x*($new_w/$old_y); $thumb_h=$new_h; } if ($old_x == $old_y) { $thumb_w=$new_w; $thumb_h=$new_h; } $dst_img=ImageCreateTrueColor($thumb_w,$thumb_h); imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y); if (preg_match("/png/",$system[1])) { imagepng($dst_img,$filename); } else { imagejpeg($dst_img,$filename); } imagedestroy($dst_img); imagedestroy($src_img); } //*********************** D I R E C T O R Y ***************************** // reads the content of $directory, takes the files that apply to $filter // and returns an array of the filenames. // You can specify which files to read, for example // $files = directory(".","jpg,gif"); // gets all jpg and gif files in this directory. // $files = directory(".","all"); // gets all files. function directory($dir,$filters) { $handle=opendir($dir); $files=array(); if ($filters == "all"){while(($file = readdir($handle))!==false){$files[] = $file;}} if ($filters != "all") { $filters=explode(",",$filters); while (($file = readdir($handle))!==false) { for ($f=0;$f<sizeof($filters);$f++): $system=explode(".",$file); if ($system[1] == $filters[$f]){$files[] = $file;} endfor; } } closedir($handle); return $files; } ?>