From 5b5ce1faacd3ebc20868cfe6f24520ead9018167 Mon Sep 17 00:00:00 2001 From: tmos Date: Sun, 4 May 2014 20:28:06 +0200 Subject: [PATCH] if the picture is transparent, bg is whiste instead of black --- createthumb.php | 156 ++++++++++++++++++++++++++++-------------------- 1 file changed, 90 insertions(+), 66 deletions(-) diff --git a/createthumb.php b/createthumb.php index bcf09be..59e9bce 100644 --- a/createthumb.php +++ b/createthumb.php @@ -15,8 +15,8 @@ Community: www.minigal.dk/forum Please enjoy this free script! Version 0.3.5 modified by Sebastien SAUVAGE (sebsauvage.net): - - Added thumbnail cache (reduces server CPU load, server bandwith and speeds up client page display). - - Thumbnails are now always in JPEG even if the source image is PNG or GIF. + - Added thumbnail cache (reduces server CPU load, server bandwith and speeds up client page display). + - Thumbnails are now always in JPEG even if the source image is PNG or GIF. USAGE EXAMPLE: File: createthumb.php @@ -31,42 +31,47 @@ if (preg_match("/.png$/i", $_GET['filename'])) header('Content-type: image/png') */ function str_split_php4( $text, $split = 1 ) { - // place each character of the string into and array - $array = array(); - for ( $i=0; $i < strlen( $text ); ){ - $key = NULL; - for ( $j = 0; $j < $split; $j++, $i++ ) { - $key .= $text[$i]; - } - array_push( $array, $key ); - } - return $array; + // place each character of the string into and array + $array = array(); + for ( $i=0; $i < strlen( $text ); ) + { + $key = NULL; + for ( $j = 0; $j < $split; $j++, $i++ ) + { + $key .= $text[$i]; + } + array_push( $array, $key ); + } + return $array; } function sanitize($name) { -// Sanitize image filename (taken from http://iamcam.wordpress.com/2007/03/20/clean-file-names-using-php-preg_replace/ ) -$fname=$name; -$replace="_"; -$pattern="/([[:alnum:]_\.-]*)/"; -$fname=str_replace(str_split_php4(preg_replace($pattern,$replace,$fname)),$replace,$fname); -return $fname; + // Sanitize image filename (taken from http://iamcam.wordpress.com/2007/03/20/clean-file-names-using-php-preg_replace/ ) + $fname=$name; + $replace="_"; + $pattern="/([[:alnum:]_\.-]*)/"; + $fname=str_replace(str_split_php4(preg_replace($pattern,$replace,$fname)),$replace,$fname); + return $fname; } // Make sure the "thumbs" directory exists. -if (!is_dir('thumbs')) { mkdir('thumbs',0700); } +if (!is_dir('thumbs')) +{ + mkdir('thumbs',0700); +} // Thumbnail file name and path. // (We always put thumbnails in jpg for simplification) $thumbname = 'thumbs/'.sanitize($_GET['filename']).'.jpg'; -if (file_exists($thumbname)) // If thumbnail exists, serve it. +if (file_exists($thumbname))// If thumbnail exists, serve it. { - $fd = fopen($thumbname, "r"); - $cacheContent = fread($fd,filesize ($thumbname)); - fclose($fd); - header('Content-type: image/jpeg'); - echo($cacheContent); + $fd = fopen($thumbname, "r"); + $cacheContent = fread($fd,filesize ($thumbname)); + fclose($fd); + header('Content-type: image/jpeg'); + echo($cacheContent); } else // otherwise, generate thumbnail, send it and save it to file. { @@ -90,57 +95,76 @@ else // otherwise, generate thumbnail, send it and save it to file. $xoord = 0; $yoord = 0; - if ($_GET['size'] == "") $_GET['size'] = 120; // - $imgsize = GetImageSize($_GET['filename']); - $width = $imgsize[0]; - $height = $imgsize[1]; - if ($width > $height) { // If the width is greater than the height it’s a horizontal picture - $xoord = ceil(($width-$height)/2); - $width = $height; // Then we read a square frame that equals the width - } else { - $yoord = ceil(($height-$width)/2); - $height = $width; - } + if ($_GET['size'] == "") + { + $_GET['size'] = 120; + } + $imgsize = GetImageSize($_GET['filename']); + $width = $imgsize[0]; + $height = $imgsize[1]; + if ($width > $height) // If the width is greater than the height it’s a horizontal picture + { + $xoord = ceil(($width-$height)/2); + $width = $height; // Then we read a square frame that equals the width + } + else + { + $yoord = ceil(($height-$width)/2); + $height = $width; + } - // Rotate JPG pictures - if (preg_match("/.jpg$|.jpeg$/i", $_GET['filename'])) { - if (function_exists('exif_read_data') && function_exists('imagerotate')) { + // Rotate JPG pictures + if (preg_match("/.jpg$|.jpeg$/i", $_GET['filename'])) + { + if (function_exists('exif_read_data') && function_exists('imagerotate')) + { $exif = exif_read_data($_GET['filename']); $ort = $exif['IFD0']['Orientation']; $degrees = 0; - switch($ort) - { - case 6: // 90 rotate right - $degrees = 270; - break; - case 8: // 90 rotate left - $degrees = 90; - break; - } + switch($ort) + { + case 6: // 90 rotate right + $degrees = 270; + break; + case 8: // 90 rotate left + $degrees = 90; + break; + } if ($degrees != 0) $target = imagerotate($target, $degrees, 0); } } - $target = ImageCreatetruecolor($_GET['size'],$_GET['size']); - if (preg_match("/.jpg$/i", $_GET['filename'])) $source = ImageCreateFromJPEG($_GET['filename']); - if (preg_match("/.gif$/i", $_GET['filename'])) $source = ImageCreateFromGIF($_GET['filename']); - if (preg_match("/.png$/i", $_GET['filename'])) $source = ImageCreateFromPNG($_GET['filename']); - imagecopyresampled($target,$source,0,0,$xoord,$yoord,$_GET['size'],$_GET['size'],$width,$height); - imagedestroy($source); + $target = ImageCreatetruecolor($_GET['size'],$_GET['size']); - //if (preg_match("/.jpg$/i", $_GET['filename'])) ImageJPEG($target,null,90); - //if (preg_match("/.gif$/i", $_GET['filename'])) ImageGIF($target,null,90); - //if (preg_match("/.png$/i", $_GET['filename'])) ImageJPEG($target,null,90); // Using ImageJPEG on purpose - ob_start(); // Start output buffering. - header('Content-type: image/jpeg'); // We always render the thumbnail in JPEG even if the source is GIF or PNG. - ImageJPEG($target,null,80); - imagedestroy($target); - - $cachedImage = ob_get_contents(); // Get the buffer content. - ob_end_flush();// End buffering - $fd = fopen($thumbname, "w"); // Save buffer to disk - if ($fd) { fwrite($fd,$cachedImage); fclose($fd); } + //if the picture can be transparent, add a white background instead a black + if (preg_match("/.gif$/i", $_GET['filename']) || preg_match("/.png$/i", $_GET['filename'])) + { + $backgroundColor = imagecolorallocate($target, 255, 255, 255); + imagefill($target, 0, 0, $backgroundColor); + } + if (preg_match("/.jpg$/i", $_GET['filename'])) $source = ImageCreateFromJPEG($_GET['filename']); + if (preg_match("/.gif$/i", $_GET['filename'])) $source = ImageCreateFromGIF($_GET['filename']); + if (preg_match("/.png$/i", $_GET['filename'])) $source = ImageCreateFromPNG($_GET['filename']); + imagecopyresampled($target,$source,0,0,$xoord,$yoord,$_GET['size'],$_GET['size'],$width,$height); + imagedestroy($source); + + //if (preg_match("/.jpg$/i", $_GET['filename'])) ImageJPEG($target,null,90); + //if (preg_match("/.gif$/i", $_GET['filename'])) ImageGIF($target,null,90); + //if (preg_match("/.png$/i", $_GET['filename'])) ImageJPEG($target,null,90); // Using ImageJPEG on purpose + ob_start(); // Start output buffering. + header('Content-type: image/jpeg'); // We always render the thumbnail in JPEG even if the source is GIF or PNG. + ImageJPEG($target,null,80); + imagedestroy($target); + + $cachedImage = ob_get_contents(); // Get the buffer content. + ob_end_flush();// End buffering + $fd = fopen($thumbname, "w"); // Save buffer to disk + if ($fd) + { + fwrite($fd,$cachedImage); + fclose($fd); + } } ?> \ No newline at end of file