Recommended:

  • phpclasses.org
  • jsclasses.org
  • jsmag.com
  • siteapps.com
  • View our reviews on Hot Scripts
  • JS Tutorial
  • scripts.com
  • securesignup.com




Recent Comments

Powered by Disqus




Back to articles

Dynamically resize or crop images

Here is a script that will alow you to dynamically resize or crop images. It takes parameters from $_GET variables. You can provide image path, width and height.

If width and height is not provided, then images default width and height is used. If only width or only height is provided - image is resized to secified width or height. If both width and height are provided, image will be resized and cropped to display as large are of image as possible with provided image dimensions.

<?php
//checking if paramateres and file exists
if(isset($_GET["path"]) && $_GET["path"] != "" && file_exists($_GET["path"]))
{
    $path = $_GET["path"];
    
    //getting extension type (jpg, png, etc)
    $type = explode(".", $path);
    $ext = strtolower($type[sizeof($type)-1]);
    $ext = (!in_array($ext, array("jpeg","png","gif"))) ? "jpeg" : $ext;
    
    //get image size
    $size = getimagesize($path);
    $width = $size[0];
    $height = $size[1];
    
    //get source image
    $func = "imagecreatefrom".$ext;
    $source = $func($path);
    
    //setting default values
    
    $new_width = $width;
    $new_height = $height;
    $k_w = 1;
    $k_h = 1;
    $dst_x =0;
    $dst_y =0;
    $src_x =0;
    $src_y =0;
    
    //selecting width and height
    if(!isset ($_GET["width"]) && !isset ($_GET["height"]))
    {
        $new_height = $height;
        $new_width = $width;
    }
    else if(!isset ($_GET["width"]))
    {
        $new_height = $_GET["height"];
        $new_width = ($width*$_GET["height"])/$height;
    }
    else if(!isset ($_GET["height"]))
    {
        $new_height = ($height*$_GET["width"])/$width;
        $new_width = $_GET["width"];
    }
    else
    {
        $new_width = $_GET["width"];
        $new_height = $_GET["height"];
    }
    
    //secelcting_offsets
        
        if($new_width>$width )//by width
        {
            $dst_x = ($new_width-$width)/2;
        }
        if($new_height>$height)//by height
        {
            $dst_y = ($new_height-$height)/2;
        }
        if( $new_width<$width || $new_height<$height )
        {
            $k_w = $new_width/$width;
            $k_h = $new_height/$height;
            
            if($new_height>$height)
            {
                $src_x  = ($width-$new_width)/2;
            }
            else if ($new_width>$width)
            {
                    $src_y  = ($height-$new_height)/2;
            }
            else
            {
                if($k_h>$k_w)
                {
                    $src_x = round(($width-($new_width/$k_h))/2);
                }
                else
                {
                    $src_y = round(($height-($new_height/$k_w))/2);
                }
            }
        }
    $output = imagecreatetruecolor( $new_width, $new_height);
    
    //to preserve PNG transparency
    if($ext == "png")
    {
        //saving all full alpha channel information
        imagesavealpha($output, true);
        //setting completely transparent color
        $transparent = imagecolorallocatealpha($output, 0, 0, 0, 127);
        //filling created image with transparent color
        imagefill($output, 0, 0, $transparent);
    }

    imagecopyresampled( $output, $source,  $dst_x, $dst_y, $src_x, $src_y, 
                        $new_width-2*$dst_x, $new_height-2*$dst_y, 
                        $width-2*$src_x, $height-2*$src_y);
    //free resources
    ImageDestroy($source);
    
    //output image
    header('Content-Type: image/'.$ext);
    $func = "image".$ext;
    $func($output); 
    
    //free resources
    ImageDestroy($output);
}
?>

You can simply create php file - for example image.php and use it like this:

<img src='image.php?path=myimage.png&width=200&height=200'/>

It is possible to modify this script cache output image or to automatically add water mark


You may also be interested in:

Powered by BlogAlike.com

blog comments powered by Disqus