From 971e72000a06e5457d867861836127a4718133b0 Mon Sep 17 00:00:00 2001 From: Savetheinternet Date: Wed, 13 Apr 2011 04:08:59 +1000 Subject: [PATCH] Custom thubmanil image type (extension) --- inc/config.php | 12 +++++++++--- inc/functions.php | 35 ++++++++++++++++++++++++++++------- post.php | 8 +++----- 3 files changed, 40 insertions(+), 15 deletions(-) diff --git a/inc/config.php b/inc/config.php index 6b7a7e8c..9493419f 100644 --- a/inc/config.php +++ b/inc/config.php @@ -153,6 +153,12 @@ $config['thumb_width'] = 255; $config['thumb_height'] = 255; + // Thumbnail extension, empty for inherited (png recommended) + $config['thumb_ext'] = ''; + + // Thumbnail quality (compression level), from 0 to 9 + $config['thumb_quality'] = 7; + // When a thumbnailed image is going to be the same (in dimension), just copy the entire file and use that as a thumbnail instead of resizing/redrawing $config['minimum_copy_resize'] = true; @@ -205,8 +211,8 @@ // These can be URLs OR base64 (data URI scheme) //$config['image_sticky'] = $config['dir']['static'] . 'sticky.gif'; //$config['image_locked'] = $config['dir']['static'] . 'locked.gif'; - //$config['image_deleted'] = $config['dir']['static'] . 'deleted.png'; - //$config['image_zip'] = $config['dir']['static'] . 'zip.png'; + //$config['image_deleted'] = $config['dir']['static'] . 'deleted.'; + //$config['image_zip'] = $config['dir']['static'] . 'zip.'; // If you want to put images and other dynamic-static stuff on another (preferably cookieless) domain, you can use this: @@ -511,7 +517,7 @@ $config['ie_mime_type_detection'] = '/<(?:body|head|html|img|plaintext|pre|script|table|title|a href|channel|scriptlet)/'; // Allowed file extensions - $config['allowed_ext'] = Array('jpg', 'jpeg', 'bmp', 'gif', 'png'); + $config['allowed_ext'] = Array('jpg', 'jpeg', 'bmp', 'gif', ''); // The names on the post buttons. (On most imageboards, these are both "Post".) $config['button_newtopic'] = 'New Topic'; diff --git a/inc/functions.php b/inc/functions.php index 07777b5d..b99788c5 100644 --- a/inc/functions.php +++ b/inc/functions.php @@ -1361,7 +1361,7 @@ return $image; } - function resize($src, $width, $height, $destination_pic, $max_width, $max_height) { + function resize($src, $width, $height, $destination_pic, $max_width, $max_height, $ext) { $return = Array(); $x_ratio = $max_width / $width; @@ -1382,13 +1382,34 @@ $return['height'] = $tn_height; $tmp = imagecreatetruecolor($tn_width, $tn_height); - imagecolortransparent($tmp, imagecolorallocatealpha($tmp, 0, 0, 0, 0)); - imagealphablending($tmp, false); - imagesavealpha($tmp, true); - + + if($ext == 'png' || $ext == 'gif') { + imagecolortransparent($tmp, imagecolorallocatealpha($tmp, 0, 0, 0, 0)); + imagesavealpha($tmp, true); + } + if($ext == 'png') + imagealphablending($tmp, false); + imagecopyresampled($tmp, $src, 0, 0, 0, 0, $tn_width, $tn_height, $width, $height); - - imagepng($tmp, $destination_pic, 4); + + switch($ext) { + case 'jpg': + case 'jpeg': + imagejpeg($tmp, $destination_pic); + break; + case 'png': + imagepng($tmp, $destination_pic, $config['thumb_quality']); + break; + case 'gif': + imagegif($tmp, $destination_pic); + break; + case 'bmp': + imagebmp($tmp, $destination_pic); + break; + default: + error('Unknwon file extension.'); + } + imagedestroy($src); imagedestroy($tmp); diff --git a/post.php b/post.php index 11222d98..6833d1d6 100644 --- a/post.php +++ b/post.php @@ -280,7 +280,7 @@ $post['extension'] = strtolower(substr($post['filename'], strrpos($post['filename'], '.') + 1)); $post['file_id'] = time() . rand(100, 999); $post['file'] = $board['dir'] . $config['dir']['img'] . $post['file_id'] . '.' . $post['extension']; - $post['thumb'] = $board['dir'] . $config['dir']['thumb'] . $post['file_id'] . '.png'; + $post['thumb'] = $board['dir'] . $config['dir']['thumb'] . $post['file_id'] . '.' . ($config['thumb_ext'] ? $config['thumb_ext'] : $post['extension']); } // Check string lengths @@ -414,9 +414,7 @@ $post['filehash'] = $config['file_hash']($post['file']); $post['filesize'] = filesize($post['file']); - - - if($config['minimum_copy_resize'] && $post['width'] <= $config['thumb_width'] && $post['height'] <= $config['thumb_height']) { + if($config['minimum_copy_resize'] && $post['width'] <= $config['thumb_width'] && $post['height'] <= $config['thumb_height'] && $post['extension'] == ($config['thumb_ext'] ? $config['thumb_ext'] : $post['extension'])) { // Copy, because there's nothing to resize copy($post['file'], $post['thumb']); @@ -426,7 +424,7 @@ $image = createimage($post['extension'], $post['file']); // Create a thumbnail - $thumb = resize($image, $post['width'], $post['height'], $post['thumb'], $config['thumb_width'], $config['thumb_height']); + $thumb = resize($image, $post['width'], $post['height'], $post['thumb'], $config['thumb_width'], $config['thumb_height'], ($config['thumb_ext'] ? $config['thumb_ext'] : $post['extension'])); $post['thumbwidth'] = $thumb['width']; $post['thumbheight'] = $thumb['height'];