From 474ad4bfaf3a83f01fcbc09f1d60ee0b1f084640 Mon Sep 17 00:00:00 2001 From: Andreas Unterkircher Date: Wed, 20 Jun 2007 18:06:10 +0000 Subject: some error handling on thumbnail generation git-svn-id: file:///var/lib/svn/phpfspot/trunk@117 fa6a889d-dae6-447d-9e79-4ba9a3039384 --- phpfspot.class.php | 148 ++++++++++++++++++++++++++--------------------------- 1 file changed, 73 insertions(+), 75 deletions(-) (limited to 'phpfspot.class.php') diff --git a/phpfspot.class.php b/phpfspot.class.php index c70478c..18c00cf 100644 --- a/phpfspot.class.php +++ b/phpfspot.class.php @@ -410,6 +410,9 @@ class PHPFSPOT { public function create_thumbnail($image, $width) { + if(!file_exists($image)) + return false; + $meta = $this->get_meta_informations($image); $rotate = 0; @@ -418,104 +421,95 @@ class PHPFSPOT { switch($meta['Orientation']) { case 1: - $rotate = 0; - $flip = false; - break; - + $rotate = 0; $flip = false; break; case 2: - $rotate = 0; - $flip = true; - break; - + $rotate = 0; $flip = true; break; case 3: - $rotate = 180; - $flip = false; - break; - + $rotate = 180; $flip = false; break; case 4: - $rotate = 180; - $flip = true; - break; - + $rotate = 180; $flip = true; break; case 5: - $rotate = 90; - $flip = true; - break; - + $rotate = 90; $flip = true; break; case 6: - $rotate = 90; - $flip = false; - break; - + $rotate = 90; $flip = false; break; case 7: - $rotate = 270; - $flip = true; - break; - + $rotate = 270; $flip = true; break; case 8: - $rotate = 270; - $flip = false; - break; + $rotate = 270; $flip = false; break; } $src_img = @imagecreatefromjpeg($image); - if($src_img) - { - /* grabs the height and width */ - $new_w = imagesx($src_img); - $new_h = imagesy($src_img); + if(!$src_img) { + print "Can't load image from ". $image ."\n"; + return false; + } - // If requested width is more then the actual image width, - // do not generate a thumbnail + /* grabs the height and width */ + $new_w = imagesx($src_img); + $new_h = imagesy($src_img); - if($width >= $new_w) { - imagedestroy($src_img); - return; - } + // If requested width is more then the actual image width, + // do not generate a thumbnail - /* calculates aspect ratio */ - $aspect_ratio = $new_h / $new_w; + if($width >= $new_w) { + imagedestroy($src_img); + return true; + } - /* sets new size */ - $new_w = $width; - $new_h = abs($new_w * $aspect_ratio); + /* calculates aspect ratio */ + $aspect_ratio = $new_h / $new_w; - /* creates new image of that size */ - $dst_img = imagecreatetruecolor($new_w,$new_h); + /* sets new size */ + $new_w = $width; + $new_h = abs($new_w * $aspect_ratio); - imagefill($dst_img, 0, 0, ImageColorAllocate($dst_img, 255, 255, 255)); + /* creates new image of that size */ + $dst_img = imagecreatetruecolor($new_w,$new_h); - /* copies resized portion of original image into new image */ - imagecopyresampled($dst_img,$src_img,0,0,0,0,$new_w,$new_h,imagesx($src_img),imagesy($src_img)); + imagefill($dst_img, 0, 0, ImageColorAllocate($dst_img, 255, 255, 255)); - /* needs the image to be flipped horizontal? */ - if($flip) { - print "(FLIP)"; - $image = $dst_img; - for($x = 0; $x < $new_w; $x++) { - imagecopy($dst_img, $image, $x, 0, $w - $x - 1, 0, 1, $h); - } - } + /* copies resized portion of original image into new image */ + imagecopyresampled($dst_img,$src_img,0,0,0,0,$new_w,$new_h,imagesx($src_img),imagesy($src_img)); - if($rotate) { - print "(ROTATE)"; - $dst_img = $this->rotateImage($dst_img, $rotate); + /* needs the image to be flipped horizontal? */ + if($flip) { + print "(FLIP)"; + $image = $dst_img; + for($x = 0; $x < $new_w; $x++) { + imagecopy($dst_img, $image, $x, 0, $w - $x - 1, 0, 1, $h); } + } - /* write down new generated file */ + if($rotate) { + print "(ROTATE)"; + $dst_img = $this->rotateImage($dst_img, $rotate); + } - if(!file_exists(dirname($image) ."/thumbs")) - mkdir(dirname($image) ."/thumbs"); + /* write down new generated file */ - $newfile = dirname($image) ."/thumbs/". $width ."_". basename($image); - imagejpeg($dst_img, $newfile, 75); + if(!file_exists(dirname($image) ."/thumbs")) { + $result = mkdir(dirname($image) ."/thumbs"); + if($result === false) { + print "Can't create thumb directory ". dirname($image) ."/thumbs\n"; + return false; + } + } - /* free your mind */ - imagedestroy($dst_img); - imagedestroy($src_img); + $newfile = dirname($image) ."/thumbs/". $width ."_". basename($image); + $result = imagejpeg($dst_img, $newfile, 75); + + /* free your mind */ + imagedestroy($dst_img); + imagedestroy($src_img); + + if($result === false) { + print "Can't write thumbnail ". $newfile ."\n"; + return false; } + return true; + } // create_thumbnail() public function get_meta_informations($file) @@ -553,21 +547,25 @@ class PHPFSPOT { return; } - /* set the new/changed MD5 sum for the current photo */ - $this->setMD5($idx, $file_md5); - $resolutions = Array( $this->cfg->thumb_width, $this->cfg->bubble_width, $this->cfg->photo_width ); + + $error = 0; /* create thumbnails for the requested resolutions */ foreach($resolutions as $resolution) { if($fromcmd) print " ". $resolution ."px"; - $this->create_thumbnail($full_path, $resolution); + if(!$this->create_thumbnail($full_path, $resolution)) + $error = 1; } + /* set the new/changed MD5 sum for the current photo */ + if(!$error) + $this->setMD5($idx, $file_md5); + if($fromcmd) print "\n"; } // gen_thumb() -- cgit v1.2.3-18-g5258