The idea is simple, I want to be able to upload a directory full of pictures and have a slideshow. I have a few groups of photos to share with the world and more and more I’m keen on the idea of coding it myself rather then use a service like flickr or Picasa.
The first step was to upload my photos. I created a directory ‘images’ and inside that directory I created ‘originals’ and ‘700w’. I then uploaded all my pictures to the originals directory.
I then created a script to automatically resize all the images in my directory.
<?php //it can take a bit to resize a bunch of images.. //php will by default only run for 30 seconds //this removes that limitation set_time_limit(0); //open our directory if ($handle = opendir('images/originals')) { //go through our directory filenames one by one while (false !== ($file = readdir($handle))) { //ignore our . and .. directories if ($file != "." && $file != "..") { //open our image $image = imagecreatefromjpeg('images/originals/'."$file"); if ($image === false) { closedir($handle); die ('Unable to open image'); } //get our original image dimensions $owidth = imagesx($image); $oheight = imagesy($image); //our new dimensions, hardcoded for a 700 width //second line adjusts the height to keep the same aspect ratio $nwidth = 700; $nheight = $newheight=($oheight/$owidth)*$nwidth; //create a new blank image the right size $tmpimg=imagecreatetruecolor($nwidth,$nheight); //and resize/resample our original into it imagecopyresampled($tmpimg,$image,0,0,0,0,$nwidth,$nheight,$owidth,$oheight); //write to file $filename = "images/700w/". $file; imagejpeg($tmpimg,$filename); //clean up imagedestroy($image); imagedestroy($tmpimg); } } closedir($handle); } ?>
I saved this as ‘resize.php’ and ran it with ‘php resize.php’. After about a minute my 700w directory was full of resized images, and I’m all set up for the slideshow I want.