<?php
/***************************************
* Mr. Thumb
* Version 1.0 ( Build 1 )
* By Jordan Thompson (WASasquatch)
****************************************/
class MrThumb {
// This is your array of supported image formats.
// Exclude types you don't want rendered.
var $valid_ext = array( 'png', 'jpg', 'jpeg', 'gif', 'bmp', 'wbmp' );
// Whether or not that script should continue
var $halt = false;
// Image Configuration array and Source Image
var $image = array();
var $s_image;
// Mr. Thumb Version
var $name = 'Mr. Thumb';
var $version = '1.0';
var $build = 1;
var $developer = 'Jordan Thompson';
var $contact = 'jordanslost at gmail';
public function about () {
echo $this->name.' Version '.$this->version.' build '.$this->build;
echo '<br />By '.$this->developer.' ('.$this->contact.')';
}
public function render ( $source ) {
$this->s_image = $source;
list( $this->image['width'], $this->image['height'] ) = getimagesize( $source );
$this->image['extension'] = strtolower( preg_replace( '/^.*\.([^.]+)$/D', '$1', $this->s_image ) );
if ( ! ( in_array( $this->image['extension'], $this->valid_ext ) ) ) {
echo 'Invalid format!';
$this->halt = true;
}
switch ( $this->image['extension'] ) {
case 'png';
$this->image['render'] = imagecreatefrompng( $this->s_image );
imagealphablending( $this->image['render'], false );
imagesavealpha( $this->image['render'], true );
break;
case 'jpg';
$this->image['render'] = imagecreatefromjpeg( $this->s_image );
break;
case 'jpeg';
$this->image['render'] = imagecreatefromjpeg( $this->s_image );
break;
case 'gif';
$this->image['render'] = imagecreatefromgif( $this->s_image );
break;
case 'bmp';
$this->image['render'] = imagecreatefromwbmp( $this->s_image );
break;
case 'wbmp';
$this->image['render'] = imagecreatefromwbmp( $this->s_image );
break;
}
}
public function contrain ( $width, $height ) {
if ( ! ( $this->halt ) ) {
if ( $this->image['extension'] == 'gif' ) {
$this->image['composite'] = imagecreatetruecolor( $width, $height );
imagecopyresample( $this->image['composite'], $this->image['render'], 0, 0, 0, 0, $width, $height, $this->image['width'], $this->image['height'] );
$this->image['colorcount'] = imagecolorstotal( $this->image['render'] );
imagetruecolortopalette( $this->image['composite'], true, $this->image['colorcount'] );
imagepalettecopy( $this->image['composite'], $this->image['render'] );
$this->image['transparentcolor'] = imagecolortransparent( $this->image['render'] );
imagefill( $this->image['composite'], 0, 0, $this->image['transparentcolor'] );
imagecolortransparent( $this->image['composite'], $this->image['transparentcolor'] );
} else {
$this->image['composite'] = imagecreatetruecolor( $width, $height );
imagecopyresample( $this->image['composite'], $this->image['render'], 0, 0, 0, 0, $width, $height, $this->image['width'], $this->image['height'] );
}
} else {
echo 'Execution halted!';
}
}
public function proportion ( $max_width, $max_height ) {
if ( ! ( $this->halt ) ) {
if ( $this->image['extension'] == 'gif' ) {
$this->image['ratio'] = ( $this->image['width'] > $this->image['height'] ) ? $max_width / $this->image['width'] : $max_height/$this->image['height'];
if( $this->image['width'] > $max_width || $this->image['height'] > $max_height ) {
$new_width = $this->image['width'] * $this->image['ratio'];
$new_height = $this->image['height'] * $this->image['ratio'];
} else {
$new_width = $this->image['width'];
$new_height = $this->image['height'];
}
$this->image['composite'] = imagecreatetruecolor( $new_width, $new_height );
imagecopyresampled( $this->image['composite'], $this->image['render'], 0, 0, 0, 0, $new_width, $new_height, $this->image['width'], $this->image['height'] );
$this->image['colorcount'] = imagecolorstotal( $this->image['render'] );
imagetruecolortopalette( $this->image['composite'], true, $this->image['colorcount'] );
imagepalettecopy( $this->image['composite'], $this->image['render'] );
$this->image['transparentcolor'] = imagecolortransparent( $this->image['render'] );
imagefill( $this->image['composite'], 0, 0, $this->image['transparentcolor'] );
imagecolortransparent( $this->image['composite'], $this->image['transparentcolor'] );
} else {
$this->image['ratio'] = ( $this->image['width'] > $this->image['height'] ) ? $max_width / $this->image['width'] : $max_height/$this->image['height'];
if( $this->image['width'] > $max_width || $this->image['height'] > $max_height ) {
$new_width = $this->image['width'] * $this->image['ratio'];
$new_height = $this->image['height'] * $this->image['ratio'];
} else {
$new_width = $this->image['width'];
$new_height = $this->image['height'];
}
$this->image['composite'] = imagecreatetruecolor( $new_width, $new_height );
imagecopyresampled( $this->image['composite'], $this->image['render'], 0, 0, 0, 0, $new_width, $new_height, $this->image['width'], $this->image['height'] );
}
} else {
echo 'Execution halted!';
}
}
public function output ( $quality = 100 ) {
if ( ! ( is_numeric( $quality ) ) ) {
$quality = 100;
}
if ( ! ( $this->halt ) ) {
switch ( $this->image['extension'] ) {
case 'png';
header( 'Content-Type: image/png' );
imagepng( $this->image['composite'], null, null );
break;
case 'jpg';
header( 'Content-Type: image/jpeg' );
imagejpeg( $this->image['composite'], null, $quality );
break;
case 'jpeg';
header( 'Content-Type: image/jpeg' );
imagejpeg( $this->image['composite'], null, $quality );
break;
case 'gif';
header( 'Content-Type: image/gif' );
imagegif( $this->image['composite'], null, $quality );
break;
case 'bmp';
header( 'Content-Type: image/wbmp' );
imagewbmp( $this->image['composite'], null, null );
break;
case 'wbmp';
header( 'Content-Type: image/wbmp' );
imagewbmp( $this->image['composite'], null, null );
break;
}
} else {
echo 'Execution halted!';
}
}
public function saveto ( $destination, $filename, $quality = 100 ) {
if ( ! ( is_numeric( $quality ) ) ) {
$quality = 100;
}
if ( ! ( $this->halt ) ) {
switch ( $this->image['extension'] ) {
case 'png';
imagepng( $this->image['composite'], $destination . $filename . '.' . $this->image['extension'], null );
break;
case 'jpg';
imagejpeg( $this->image['composite'], $destination . $filename . '.' . $this->image['extension'], $quality );
break;
case 'jpeg';
imagejpeg( $this->image['composite'], $destination . $filename . '.' . $this->image['extension'], $quality );
break;
case 'gif';
imagegif( $this->image['composite'], $destination . $filename . '.' . $this->image['extension'], $quality );
break;
case 'bmp';
imagewbmp( $this->image['composite'], $destination . $filename . '.' . $this->image['extension'], null );
break;
case 'wbmp';
imagewbmp( $this->image['composite'], $destination . $filename . '.' . $this->image['extension'], null );
break;
}
} else {
echo 'Execution halted!';
}
}
public function clear_cache () {
imagedestroy( $this->image['composite'] );
imagedestroy( $this->image['render'] );
unset( $this->image );
unset( $this->s_image );
$this->halt = false;
}
}
?>
|