PHP Classes

File: class.Img_utils.php

Recommend this page to a friend!
  Classes of marcelo entraigas   img_utils   class.Img_utils.php   Download  
File: class.Img_utils.php
Role: Class source
Content type: text/plain
Description: Main class file!!!
Class: img_utils
Crop, resize and convert the format of images
Author: By
Last change: remove a function call to a non existing function (thanks Soluyanov Vadim).
Date: 14 years ago
Size: 5,174 bytes
 

Contents

Class file image Download
<?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);
    }

}
?>