Rasher's Toolbox

Back

create_thumb

mixed create_thumb(string filename, string thumbtype, int maxsize [, string output]) -- Creates thumbnail of an image retaining proportions. Output to browser or file.

Description

Creates a thumbnail of the file filename with a maximum width/height of maxsize. The thumbnail will be of type thumbtype. If the optional fourth parameter is set, the thumbnail will be output to this file. The function will attempt to use a thumbnail embedded in the EXIF tag of jpeg files if one is available and larger than maxsize.

Example

<?php
  create_thumb
('test.jpg''png'50);
  
create_thumb('test.jpg''png'50'test-thumb.png')
?>

Source

Published under the terms of the BSD License

<?php
function create_thumb($img$type$maxsize$output false$useexif true) {
    
set_time_limit ("60");
    
ini_set('gd.jpeg_ignore_warning'1);

    
$maxsize substr(ereg_replace("[^[:digit:]]"""$maxsize),0,4); // fjern alt andet end tal og reducer til 4 tegn.

    
$img_abs $img;

    
$filtype getimagesize($img_abs);

    if (
$filtype[2] == && $useexif === true && function_exists('exif_thumbnail')) {
        
$data exif_thumbnail($img$width$height$exifthumbtype);
        if (
$data !== false && ($width >= $maxsize || $height >= $maxsize)) {
            if (
$output !== false) {
                
$fp fopen($output'w');
                
fputs($fp$data);
                
fclose($fp);
                
$img_abs $output;
                
$img $output;
                
$filtype getimagesize($img_abs);
                
//return true;
            
}
            else {
                print(
$data);
            }
        }
    }
 
    if (
$filtype[2] == && imagetypes() & IMG_PNG) { if (!$im imagecreatefrompng($img_abs)) { return false; }}
    elseif (
$filtype[2] == && imagetypes() & IMG_JPEG) { if (!$im imagecreatefromjpeg($img_abs)) { return false; }}
    elseif (
$filtype[2] == && imagetypes() & IMG_GIF) { if (!$im imagecreatefromgif($img_abs)) { return false; }}
    else { return 
false; }


    
$xsize=imagesx($im); // Find x- and y-size of image
    
$ysize=imagesy($im);

    
$forhold=$xsize/$ysize// Find relation between the two.

    
if ($ysize <= $maxsize && $xsize <= $maxsize) { $ynysize=$ysize$xnysize=$xsize; }
    elseif (
$ysize>$maxsize && $xsize<$maxsize+1) { $ynysize=$maxsize$xnysize=$ynysize*$forhold; }
    elseif (
$xsize>$maxsize && $ysize<$maxsize+1) { $xnysize=$maxsize$ynysize=$xnysize/$forhold; }
    elseif (
$ysize>$maxsize && $xsize>$maxsize) {
        if (
$xsize>$ysize) { $xnysize=$maxsize$ynysize=$xnysize/$forhold; }
        else { 
$ynysize=$maxsize$xnysize=$ynysize*$forhold; }
    }

    
$xnysize floor($xnysize);
    
$ynysize floor($ynysize);

    if (
in_array ("imagegd2",get_extension_funcs("gd"))) { // check if gd2 is loaded (the imagegd2 function exists)
        
$thumb ImageCreateTrueColor($xnysize$ynysize);
        
imagecopyresampled($thumb$im0000$xnysize$ynysize$xsize$ysize);
    }
    else {
        
$thumb ImageCreate($xnysize$ynysize);
        
imagecopyresized($thumb$im0000$xnysize$ynysize$xsize$ysize);
    }

    
ImageDestroy ($im);

    if (
$type == "png") {
        if (isset(
$output)) {
            if (
is_writable($output) || true) {
                if (!
ImagePng($thumb$output)) { return false; }
                else { return 
true; }
            }
            else { return 
false; }
        }
        else {
            
ImagePng($thumb);
        }
    }

    elseif (
$type == "gif") {
        if (isset(
$output)) {
            if (
is_writable($output) || true) {
                if (!
ImageGIF($thumb$output)) { return false; }
                else { return 
true; }
            }
            else { return 
false; }
        }
        else {
            
ImageGIF($thumb);
        }
    }

    elseif (
$type == "jpg" || $type == "jpeg") {
        if (isset(
$output)) {
            if (
is_writable($output) || true) {
                if (!
ImageJPEG($thumb$output)) { return false; }
                else { return 
true; }
            }
            else { return 
false; }
        }
        else {
            
ImageJPEG($thumb);
        }
    }

    elseif (
$type == "wbmp") {
        if (isset(
$output)) {
            if (
is_writable($output) || true) {
                if (!
ImageWBMP($thumb$output)) { return false; }
                else { return 
true; }
            }
            else { return 
false; }
        }
        else {
            
ImageWBMP($thumb);
        }
    }

    else {
        
ImageDestroy ($thumb);
        return 
false;
    }
}
?>

Last updated: Sat Jun 14 20:02:44 CEST 2008

Valid XHTML 1.0! Valid HTML 3.2!