/**
* Template-Lite {resize_image} function plugin Using Image Magic
*
* Type: function
* Name: resize_image
* Purpose: Outputs resized image based on values passed.
* Input:
* - img_src tag path
* - directory = full directory path where images are located
* - thumbdir = Optional directory path to store thumbnail images. directory will be used if not supplied.
* - filename = Name of the file
* - xscale = Image max width size default 2000 px
* - yscale = Image max height size default 2000 px
* - thumbname = prefix name for new image, the thumb name is not needed if you are using a return type of 1
* - returntype = 1 - return image tag with full size image name and path but with height and width attributes adjusted
* 0 - resize image and store thumbnail in directory and return that thumbnail img tag. Default setting
* - url = Optional URL to download image from for resizing if the image doesn't exist in the image directory (CURL must be installed to use this feature)
* - binpath = Optional path to the ImageMagick mogrify command. If missing slower GD code will be used.
* - alt = Optional alt attribute for the img tag Default is "image"
* - border = Optional border attribute for img tag Default is 0
* - class = Optional class attribute for img tag
* - daystokeep = Optional number of days to cache the thumbnail image. Default is 5 days
*
* Examples:
*
* {resize_image img_src="/thumbnails/" directory="/html/mysite/ad_images/" thumbdir="/html/mysite/thumbnails/" filename="Myfile.jpg" xscale="150" yscale="200" thumbname="thumb_"} ** * Output * * Author: Rick Thomson rick@oznet.com * Author: Mark Dickenson akapanamajack@sourceforge.net */ // Calculate percentage between width and height function tpl_function_resize_percent($maximum, $current) { return (real)(100 * ($maximum / $current)); } function tpl_function_resize_unpercent($percent, $whole) { return (real)(($percent * $whole) / 100); } function tpl_function_resize_image($params, &$tpl) { extract($params); if (empty($directory)) { throw new Template_Exception("resize_image: missing 'directory' parameter", $tpl); } if (empty($thumbdir)) { $thumbdir = $directory; } if (empty($filename)) { throw new Template_Exception("resize_image: missing 'filename' parameter", $tpl); } if (empty($xscale)) { $xscale = 2000; } $maximagewidth=$xscale; if (empty($xscale)) { $yscale = 2000; } $maximageheight=$yscale; if (empty($alt)) { $alt = "image"; } if (empty($border)) { $border = 0; } if (empty($daystokeep)) { $daystokeep = 5; } if (!function_exists('gd_info')) { throw new Template_Exception("resize_image: the GD library is not installed", $tpl); } if(!file_exists($directory . $filename) && !empty($url) && function_exists('curl_init')) { $ch = curl_init ($url . $filename); $fp = fopen ($directory . $filename, "w"); curl_setopt ($ch, CURLOPT_FILE, $fp); curl_setopt ($ch, CURLOPT_HEADER, 0); curl_exec ($ch); curl_close ($ch); fclose ($fp); } if(file_exists($directory . $filename)) { $imageinfo = @getimagesize($directory . $filename); if(empty($imageinfo)) { return; } if ($returntype == 1) { $imagewidth = $imageinfo[0]; $imageheight = $imageinfo[1]; if($maximagewidth < $imagewidth) { $imageheight = tpl_function_resize_unpercent(tpl_function_resize_percent($maximagewidth, $imagewidth), $imageheight); $imagewidth = $maximagewidth; } if($maximageheight < $imageheight) { $imagewidth = tpl_function_resize_unpercent(tpl_function_resize_percent($maximageheight, $imageheight), $imagewidth); $imageheight = $maximageheight; } return ""; } if (empty($thumbname)) { throw new Template_Exception("resize_image: missing 'thumbname' parameter", $tpl); } $now=urlencode(date("F j, Y, g:i a")); $newimagepath = $thumbdir . $thumbname . $filename; $newthumbnail = 0; if(!file_exists($newimagepath)) { copy($directory . $filename, $newimagepath); $newthumbnail = 1; } $datechanged = date("j", time()) - date("j", filemtime($newimagepath)); if(($datechanged > -$daystokeep && $datechanged < $daystokeep) && $newthumbnail = 0) { // Do not rebuild $imagewidth = $imageinfo[0]; $imageheight = $imageinfo[1]; if($maximagewidth < $imagewidth) { $imageheight = tpl_function_resize_unpercent(tpl_function_resize_percent($maximagewidth, $imagewidth), $imageheight); $imagewidth = $maximagewidth; } if($maximageheight < $imageheight) { $imagewidth = tpl_function_resize_unpercent(tpl_function_resize_percent($maximageheight, $imageheight), $imagewidth); $imageheight = $maximageheight; } } else { // rebuild copy($directory . $filename, $newimagepath); $imagewidth = $imageinfo[0]; $imageheight = $imageinfo[1]; if($maximagewidth < $imagewidth) { $imageheight = tpl_function_resize_unpercent(tpl_function_resize_percent($maximagewidth, $imagewidth), $imageheight); $imagewidth = $maximagewidth; } if($maximageheight < $imageheight) { $imagewidth = tpl_function_resize_unpercent(tpl_function_resize_percent($maximageheight, $imageheight), $imagewidth); $imageheight = $maximageheight; } $imagewidth = round($imagewidth); $imageheight = round($imageheight); $scale = $imagewidth . "x" . $imageheight . "!"; if (empty($binpath)) { if($imageinfo[2] == 1) { $sourceimage = imagecreatefromgif($directory . $filename); } elseif($imageinfo[2] == 2) { $sourceimage = imagecreatefromjpeg($directory . $filename); } elseif($imageinfo[2] == 3) { $sourceimage = imagecreatefrompng($directory . $filename); } $destinationimage = imagecreatetruecolor($imagewidth, $imageheight); imagecopyresized($destinationimage, $sourceimage, 0, 0, 0, 0, $imagewidth, $imageheight, $imageinfo[0], $imageinfo[1]); if($imageinfo[2] == 1) { imagegif($destinationimage, $newimagepath); } elseif($imageinfo[2] == 2) { imageJPEG($destinationimage, $newimagepath, 75); } elseif($imageinfo[2] == 3) { imagepng($destinationimage, $newimagepath); } imagedestroy($sourceimage); imagedestroy($destinationimage); } else { if ($imageinfo[2] == 2) { system( $binpath . "mogrify -quality 75 -geometry $scale $newimagepath"); } else { system( $binpath . "mogrify -geometry $scale $newimagepath"); } } } return ""; } } ?>