<?php
 
class Img_utils{
 
    # public var (class default values)
 
    var $config = array(
 
        'max_width'   => 80,
 
        'max_height'  => 80,
 
        'scale_by'    => 'auto',  // posible values: width, height, auto
 
        );
 
    #private source image var...
 
    var $img_source    = '';
 
    var $img_handler   = false;
 
    var $img_width     = null;
 
    var $img_height    = null;
 
    #private thumbs var...
 
    var $thumb_handler = false;
 
    var $thumb_width   = null;
 
    var $thumb_height  = null;
 
    var $thumb_x       = 0;
 
    var $thumb_y       = 0;
 
    
 
    /**
 
     * Open a source image file and calculate thumbmail size
 
     *
 
     * @param string $file
 
     * @return boolean
 
     */
 
    function open($file){
 
        //intitialize private var...
 
        $this->img_source    = $file;
 
        $this->img_handler   = false;
 
        $this->thumb_handler = false;
 
        $this->thumb_width   = null;
 
        $this->thumb_height  = null;
 
        $this->thumb_x       = 0;
 
        $this->thumb_y       = 0;
 
        //initialize img_handler
 
        $arr_pathinfo = pathinfo($file);
 
        $extension = strtolower($arr_pathinfo['extension']);
 
        if($extension == 'jpg' || $extension == 'jpeg')
 
            $this->img_handler = imagecreatefromjpeg($file);
 
        elseif($extension == 'png')
 
            $this->img_handler = imagecreatefrompng($file);
 
        elseif($extension == 'gif')
 
            $this->img_handler = imagecreatefromgif($file);
 
        elseif($extension == 'bmp')
 
            $this->img_handler = imagecreatefromwbmp($file);
 
        if($this->img_handler){
 
            //image original size
 
            list($this->img_width, $this->img_height) = getimagesize($this->img_source);
 
            return true;
 
        }
 
        return false;
 
    }
 
 
    /**
 
     * Save the thumbmail or image
 
     *
 
     * @param string $file
 
     * @param string $ext
 
     * @return booblean
 
     */
 
    function save($file, $ext = 'png'){
 
        ini_set ( "memory_limit", "48M"); 
 
        if(is_null($this->thumb_width) or is_null($this->thumb_height)){
 
            $this->thumb_width  = $this->img_width;
 
            $this->thumb_height = $this->img_height;
 
        }
 
        $this->thumb_handler = imagecreatetruecolor($this->thumb_width, $this->thumb_height);
 
        @imagecopyresampled($this->thumb_handler, $this->img_handler, 0 , 0, $this->thumb_x, $this->thumb_y, $this->thumb_width, $this->thumb_height, $this->img_width, $this->img_height);
 
        @unlink($file);
 
        switch ($ext) {
 
            case 'bmp':
 
                imagewbmp ($this->thumb_handler, "$file.bmp");
 
                break;
 
            case 'gif':
 
                imagegif ($this->thumb_handler, "$file.gif");
 
                break;
 
            case 'jpg':
 
            case 'jpeg':
 
                imagejpeg ($this->thumb_handler, "$file.jpg", 80);
 
                break;
 
            case 'png':
 
            default:
 
                imagepng ($this->thumb_handler, "$file.png", 8);
 
                break;
 
        }
 
        return imagedestroy($this->thumb_handler);
 
    }
 
    
 
    /**
 
     * Create a thumbmail with a portion (subarea) of the source image
 
     *
 
     * @param string $file
 
     * @param int $x thumb x position
 
     * @param int $y thumb y position
 
     * @param int $w thumb width
 
     * @param int $h thumb height
 
     */
 
 
    function crop($x, $y, $w, $h){
 
        $this->thumb_x    = intval($x);
 
        $this->thumb_y    = intval($y);
 
        $this->img_width  = intval($w);
 
        $this->img_height = intval($h);
 
    }
 
    
 
    /**
 
     * Create thumbmail...
 
     *
 
     * @param int $max_width
 
     * @param int $max_height
 
     * @param string  $scale_by
 
     */
 
    function resize($max_width, $max_height, $scale_by = 'auto'){
 
        $this->config['max_width']  = intval($max_width);
 
        $this->config['max_height'] = intval($max_height);
 
        $this->config['scale_by']   = ($scale_by == 'height')? 'height' : ($scale_by == 'width')? 'width' : 'auto';
 
        $this->auto_resize();
 
    }
 
    
 
    /**
 
     * Auto resize the thumb using the default 'scale_by' value of class constructor...
 
     *
 
     */
 
    function auto_resize(){
 
        switch ($this->config['scale_by']) {
 
            case 'width':
 
                $this->resize_by_width($this->config['max_width']);
 
                break;
 
            case 'height':
 
                $this->resize_by_height($this->config['max_height']);
 
                break;
 
            case 'auto':
 
            default:
 
                //is it landscape or portrait image?
 
                if($this->img_width > $this->img_height){
 
                    //it is landscape, resize by with
 
                    $this->resize_by_width($this->config['max_width']);
 
                    if($this->thumb_height > $this->config['max_height'])
 
                        $this->resize_by_height($this->config['max_height']);
 
                }elseif($this->img_width < $this->img_height){
 
                    //it is portrait, resize by height
 
                    $this->resize_by_height($this->config['max_height']);
 
                    if($this->thumb_width > $this->config['max_width'])
 
                        $this->resize_by_width($this->config['max_width']);
 
                }else{
 
                    //is a square
 
                    $this->thumb_width  = $this->config['max_width'];
 
                    $this->thumb_height = $this->config['max_height'];
 
                }
 
                break;
 
        }
 
    }
 
    
 
    /**
 
     * Rezise thumb by height
 
     *
 
     * @param int $height
 
     */
 
    function resize_by_height($height){
 
        $this->thumb_height = $height;
 
        $ratio              = $height / $this->img_width;
 
        $this->thumb_width  = intval($this->img_height * $ratio);
 
    }
 
    /**
 
     * Rezise thumb by width
 
     *
 
     * @param int $width
 
     */
 
    function resize_by_width($width){
 
        $this->thumb_width  = $width;
 
        $ratio              = $width / $this->img_width;
 
        $this->thumb_height = intval($this->img_height * $ratio);
 
    }
 
 
}
 
?>
 
 |