!C99Shell v. 2.0 [PHP 7 Update] [25.02.2019]!

Software: Apache/2.4.18 (Ubuntu). PHP/7.0.33-0ubuntu0.16.04.16 

uname -a: Linux digifus 3.13.0-57-generic #95-Ubuntu SMP Fri Jun 19 09:28:15 UTC 2015 x86_64 

uid=33(www-data) gid=33(www-data) groups=33(www-data) 

Safe-mode: OFF (not secure)

/var/www/html/almazenServer/application/libraries/   drwxr-xr-x
Free 10.02 GB of 29.4 GB (34.08%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     image_moo.php (37.21 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/*
 * Image_Moo library
 *
 * Written due to image_lib not being so nice when you have to do multiple things to a single image!
 *
 * @license        MIT License
 * @author        Matthew Augier, aka Mat-Moo
 * @link        http://www.dps.uk.com
 * @docu        http://todo :)
 * @email        matthew@dps.uk.com
 *
 * @file        image_moo.php
 * @version        1.0.1
 * @date        2010 Dec 13
 *
 * Copyright (c) 2010 Matthew Augier
 *
 * Requires PHP 5 and GD2!
 *
 * Example usage
 *    $this->image_moo->load("file")->resize(64,40)->save("thumb")->resize(640,480)->save("medium");
 *    if ($this->image_moo->errors) print $this->image_moo->display_errors();
 *
 * COLOURS!
 * Any function that can take a colour as a parameter can take "#RGB", "#RRGGBB" or an array(R,G,B)
 *
 * image manipulation functions
 * -----------------------------------------------------------------------------
 * load($x) - Loads an image file specified by $x - JPG, PNG, GIF supported
 * save($x) - Saved the manipulated image (if applicable) to file $x - JPG, PNG, GIF supported
 * save_pa($prepend="", $append="", $overwrite=FALSE) - Saves using the original image name but with prepend and append text, e.g. load('moo.jpg')->save_pa('pre_','_app') would save as filename pre_moo_app.jpg
 * save_dynamic($filename="") - Saves as a stream output, use filename to return png/jpg/gif etc., default is jpeg
 * resize($x,$y,$pad=FALSE) - Proportioanlly resize original image using the bounds $x and $y, if padding is set return image is as defined centralised using BG colour
 * resize_crop($x,$y) - Proportioanlly resize original image using the bounds $x and $y but cropped to fill dimensions
 * stretch($x,$y) - Take the original image and stretch it to fill new dimensions $x $y
 * crop($x1,$y1,$x2,$y2) - Crop the original image using Top left, $x1,$y1 to bottom right $x2,y2. New image size =$x2-x1 x $y2-y1
 * rotate($angle) - Rotates the work image by X degrees, normally 90,180,270 can be any angle.Excess filled with background colour
 * load_watermark($filename, $transparent_x=0, $transparent_y=0) - Loads the specified file as the watermark file, if using PNG32/24 use x,y to specify direct positions of colour to use as index
 * make_watermark_text($text, $fontfile, $size=16, $colour="#ffffff", $angle=0) - Creates a text watermark
 * watermark($position, $offset=8, $abs=FALSE) - Use the loaded watermark, or created text to place a watermark. $position works like NUM PAD key layout, e.g. 7=Top left, 3=Bottom right $offset is the padding/indentation, if $abs is true then use $positiona and $offset as direct values to watermark placement
 * border($width,$colour="#000") - Draw a border around the output image X pixels wide in colour specified
 * border_3d($width,$rot=0,$opacity=30) - Draw a 3d border (opaque) around the current image $width wise in 0-3 rot positions, $opacity allows you to change how much it effects the picture
 * filter($function, $arg1=NULL, $arg2=NULL, $arg3=NULL, $arg4=NULL) -Runs the standard imagefilter GD2 command, see http://www.php.net/manual/en/function.imagefilter.php for details
 * round($radius,$invert=FALSE,$corners(array[top left, top right, bottom right, bottom left of true or False)="") default is all on and normal rounding
 * shadow($size=4, $direction=3, $colour="#444") - Size in pixels, note that the image will increase by this size, so resize(400,400)->shadoe(4) will give an image 404 pixels in size, Direction works on teh keypad basis like the watermark, so 3 is bottom right, $color if the colour of the shadow.
 * -----------------------------------------------------------------------------
 * image helper functions
 * display_errors($open = '<p>', $close = '</p>') - Display errors as Ci standard style
 * set_jpeg_quality($x) - quality to wrte jpeg files in for save, default 75 (1-100)
 * set_watermark_transparency($x) - the opacity of the watermark 1-100, 1-just about see, 100=solid
 * check_gd() - Run to see if you server can use this library
 * clear_temp() - Call to clear the temp changes using the master image again
 * clear() - Clears all images in memory
 * -----------------------------------------------------------------------------
 *
 * KNOWN BUGS
 * make_watermark_text does not deal with rotation angle correctly, box is cropped
 *
 * TO DO
 *
 * THANKS
 * Matjaž for poiting out the save_pa bug (should of tested it!)
 * Cahva for posting yet another bug in the save_pa (Man I can be silly sometimes!)
 * Cole spotting the resize flaw and providing a fix
 *
 */

class Image_moo
{
    
// image vars
    
private $main_image="";
     private 
$watermark_image;
    private 
$temp_image;
    private 
$jpeg_quality=75;
    private 
$background_colour="#ffffff";
    private 
$watermark_method;

    
// other
    
private $filename="";

    
// watermark stuff, opacity
    
private $watermark_transparency=50;

    
// reported errors
    
public $errors=FALSE;
    private 
$error_msg = array();

    
// image info
    
public $width=0;
    public 
$height=0;

    function 
Image_moo()
    
//----------------------------------------------------------------------------------------------------------
    // create stuff here as needed
    //----------------------------------------------------------------------------------------------------------
    
{
        
log_message('debug'"Image Moo Class Initialized");
    }

    private function 
_clear_errors()
    
//----------------------------------------------------------------------------------------------------------
    // load a resource
    //----------------------------------------------------------------------------------------------------------
    
{
        
$this->error_msg = array();
    }

    private function 
set_error($msg)
    
//----------------------------------------------------------------------------------------------------------
    // Set an error message
    //----------------------------------------------------------------------------------------------------------
    
{
        
$this->errors TRUE;
        
$this->error_msg[] = $msg;
    }

    public function 
display_errors($open '<p>'$close '</p>')
    
//----------------------------------------------------------------------------------------------------------
    // returns the errors formatted as needed, same as CI doed
    //----------------------------------------------------------------------------------------------------------
    
{
        
$str '';
        foreach (
$this->error_msg as $val)
        {
            
$str .= $open.$val.$close;
        }
        return 
$str;
    }

    public function 
check_gd()
    
//----------------------------------------------------------------------------------------------------------
    // verification util to see if you can use image_moo
    //----------------------------------------------------------------------------------------------------------
    
{
        if ( ! 
extension_loaded('gd'))
        {
            if ( ! 
dl('gd.so'))
            {
                
$this->set_error('GD library does not appear to be loaded');
                return 
FALSE;
            }
        }
        if (
function_exists('gd_info'))
        {
            
$gdarray = @gd_info();
            
$versiontxt ereg_replace('[[:alpha:][:space:]()]+'''$gdarray['GD Version']);
            
$versionparts=explode('.',$versiontxt);
            if (
$versionparts[0]=="2")
            {
                return 
TRUE;
            }
            else
            {
                
$this->set_error('Requires GD2, this reported as '.$versiontxt);
                return 
FALSE;
            }
        }
        else
        {
            
$this->set_error('Could not verify GD version');
            return 
FALSE;
        }
    }

    private function 
_check_image()
    
//----------------------------------------------------------------------------------------------------------
    // checks that we have an image loaded
    //----------------------------------------------------------------------------------------------------------
    
{
        if (!
is_resource($this->main_image))
        {
            
$this->set_error("No main image loaded!");
            return 
FALSE;
        }
        else
        {
            return 
TRUE;
        }
    }

    function 
save_dynamic($filename="")
    
//----------------------------------------------------------------------------------------------------------
    // Saves the temp image as a dynamic image
    // e.g. direct output to the browser
    //----------------------------------------------------------------------------------------------------------
    
{
        
// validate we loaded a main image
        
if (!$this->_check_image()) return $this;

        
// if no operations, copy it for temp save
        
$this->_copy_to_temp_if_needed();

        
// ok, lets go!
        
if ($filename==""$filename=rand(1000,999999).".jpg";                    // send as jpeg
        
$ext strtoupper(pathinfo($filenamePATHINFO_EXTENSION));
        
header("Content-disposition: filename=$filename;");
        
header('Content-transfer-Encoding: binary');
        
header('Last-modified: '.gmdate('D, d M Y H:i:s'));
        switch (
$ext)
        {
            case 
"GIF"  :
                
header("Content-type: image/gif");
                
imagegif($this->temp_image);
                return 
$this;
                break;
            case 
"JPG" :
            case 
"JPEG" :
                
header("Content-type: image/jpeg");
                
imagejpeg($this->temp_imageNULL$this->jpeg_quality);
                return 
$this;
                break;
            case 
"PNG" :
                
header("Content-type: image/png");
                
imagepng($this->temp_image);
                return 
$this;
                break;
        }
        
$this->set_error('Unable to save, extension not GIF/JPEG/JPG/PNG');
        return 
$this;
    }

    function 
save_pa($prepend=""$append=""$overwrite=FALSE)
    
//----------------------------------------------------------------------------------------------------------
    // Saves the temp image as the filename specified,
    // overwrite = true of false
    //----------------------------------------------------------------------------------------------------------
    
{
        
// validate we loaded a main image
        
if (!$this->_check_image()) return $this;

        
// get current file parts
        
$parts=pathinfo($this->filename);

        
// save
        
$this->save($parts["dirname"].'/'.$prepend.$parts['filename'].$append.'.'.$parts["extension"], $overwrite);

        return 
$this;
    }

    function 
save($filename,$overwrite=FALSE)
    
//----------------------------------------------------------------------------------------------------------
    // Saves the temp image as the filename specified,
    // overwrite = true of false
    //----------------------------------------------------------------------------------------------------------
    
{
        
// validate we loaded a main image
        
if (!$this->_check_image()) return $this;

        
// if no operations, copy it for temp save
        
$this->_copy_to_temp_if_needed();

        
// check if it already exists
        
if (!$overwrite)
        {
            
// don't overwrite, so check for file
            
if (file_exists($filename))
            {
                
$this->set_error('File exists, overwrite is FALSE, could not save over file '.$filename);
                return 
$this;
            }
        }

        
// find out the type of file to save
        
$ext strtoupper(pathinfo($filenamePATHINFO_EXTENSION));
        switch (
$ext)
        {
            case 
"GIF"  :
                
imagegif($this->temp_image$filename);
                return 
$this;
                break;
            case 
"JPG" :
            case 
"JPEG" :
                
imagejpeg($this->temp_image$filename$this->jpeg_quality);
                return 
$this;
                break;
            case 
"PNG" :
                
imagepng($this->temp_image$filename);
                return 
$this;
                break;
        }

        
// invalid filetype?!
        
$this->set_error('Do no know what '.$ext.' filetype is in filename '.$filename);
        return 
$this;
    }

    private function 
_load_image($filename)
    
//----------------------------------------------------------------------------------------------------------
    // private function to load a resource
    //----------------------------------------------------------------------------------------------------------
    
{
        
// check the request file can be located
        
if (!file_exists($filename))
        {
            
$this->set_error('Could not locate file '.$filename);
            return 
FALSE;
        }

        
// get image info about this file
        
$image_info=getimagesize($filename);

        
// load file depending on mimetype
        
switch ($image_info["mime"])
        {
            case 
"image/gif"  :
                return 
imagecreatefromgif($filename);
                break;
            case 
"image/jpeg" :
                return 
imagecreatefromjpeg($filename);
                break;
            case 
"image/png" :
                 return 
imagecreatefrompng($filename);
                break;
        }

        
// invalid filetype?!
        
$this->set_error('Unable to load '.$filename.' filetype '.$image_info["mime"].'not recognised');
        return 
FALSE;
    }

    public function 
load($filename)
    
//----------------------------------------------------------------------------------------------------------
    // Load an image, public function
    //----------------------------------------------------------------------------------------------------------
    
{
        
// new image, reset error messages
        
$this->_clear_errors();

        
// remove temporary image stored
        
$this->clear_temp();

        
// save filename
        
$this->filename=$filename;

        
// reset width and height
        
$this->width 0;
        
$this->height 0;

        
// load it
        
$this->main_image $this->_load_image($filename);

        
// no error, then get the dminesions set
        
if ($this->main_image <> FALSE)
        {
            
$this->width imageSX($this->main_image);
            
$this->height imageSY($this->main_image);
        }

        
// return the object
        
return $this;
    }

    public function 
load_watermark($filename$transparent_x=NULL$transparent_y=NULL)
    
//----------------------------------------------------------------------------------------------------------
    // Load an image, public function
    //----------------------------------------------------------------------------------------------------------
    
{
        if(
is_resource($this->watermark_image)) imagedestroy($this->watermark_image);
        
$this->watermark_image $this->_load_image($filename);

        if(
is_resource($this->watermark_image))
        {
            
$this->watermark_method 1;
            if((
$transparent_x <> NULL) AND ($transparent_y <> NULL))
            {
                
// get the top left corner colour allocation
                
$tpcolour imagecolorat($this->watermark_image$transparent_x$transparent_y);

                
// set this as the transparent colour
                
imagecolortransparent($this->watermark_image$tpcolour);

                
// $set diff method
                
$this->watermark_method 2;
            }
        }

        
// return this object
        
return $this;
    }

    public function 
set_watermark_transparency($transparency=50)
    
//----------------------------------------------------------------------------------------------------------
    // Sets the quality that jpeg will be saved at
    //----------------------------------------------------------------------------------------------------------
    
{
        
$this->watermark_transparency $transparency;
        return 
$this;
    }

    public function 
set_background_colour($colour="#ffffff")
    
//----------------------------------------------------------------------------------------------------------
    // Sets teh background colour to use on rotation and padding for resize
    //----------------------------------------------------------------------------------------------------------
    
{
        
$this->background_colour $this->_html2rgb($colour);
        return 
$this;
    }

    public function 
set_jpeg_quality($quality=75)
    
//----------------------------------------------------------------------------------------------------------
    // Sets the quality that jpeg will be saved at
    //----------------------------------------------------------------------------------------------------------
    
{
        
$this->jpeg_quality $quality;
        return 
$this;
    }

    private function 
_copy_to_temp_if_needed()
    
//----------------------------------------------------------------------------------------------------------
    // If temp image is empty, e.g. not resized or done anything then just copy main image
    //----------------------------------------------------------------------------------------------------------
    
{
        if (!
is_resource($this->temp_image))
        {
            
// create a temp based on new dimensions
            
$this->temp_image imagecreatetruecolor($this->width$this->height);

            
// check it
            
if(!is_resource($this->temp_image))
            {
                
$this->set_error('Unable to create temp image sized '.$this->width.' x '.$this->height);
                return 
FALSE;
            }

            
// copy image to temp workspace
            
imagecopy($this->temp_image$this->main_image0000$this->width$this->height);
        }
    }

    public function 
clear()
    
//----------------------------------------------------------------------------------------------------------
    // clear everything!
    //----------------------------------------------------------------------------------------------------------
    
{
        if(
is_resource($this->main_image)) imagedestroy($this->main_image);
        if(
is_resource($this->watermark_image)) imagedestroy($this->watermark_image);
        if(
is_resource($this->temp_image)) imagedestroy($this->temp_image);
        return 
$this;
    }

    public function 
clear_temp()
    
//----------------------------------------------------------------------------------------------------------
    // you may want to revert back to teh original image to work on, e.g. watermark, this clears temp
    //----------------------------------------------------------------------------------------------------------
    
{
        if(
is_resource($this->temp_image)) imagedestroy($this->temp_image);
        return 
$this;
    }

    public function 
resize_crop($mw,$mh)
    
//----------------------------------------------------------------------------------------------------------
    // take main image and resize to tempimage using EXACT boundaries mw,mh (max width and max height)
    // this is proportional and crops the image centrally to fit
    //----------------------------------------------------------------------------------------------------------
    
{
        if (!
$this->_check_image()) return $this;

        
// clear temp image
        
$this->clear_temp();

        
// create a temp based on new dimensions
        
$this->temp_image imagecreatetruecolor($mw,$mh);

        
// check it
        
if(!is_resource($this->temp_image))
        {
            
$this->set_error('Unable to create temp image sized '.$mw.' x '.$mh);
            return 
$this;
        }

        
// work out best positions for copy
        
$wx=$this->width $mw;
        
$wy=$this->height $mh;
        if (
$wx >= $wy)
        {
            
// use full height
            
$sy 0;
            
$sy2 $this->height;

            
// calcs
            
$calc_width $mw $wy;
            
$sx = ($this->width $calc_width) / 2;
            
$sx2 $calc_width;
        }
        else
        {
            
// use full width
            
$sx 0;
            
$sx2 $this->width;

            
// calcs
            
$calc_height $mh $wx;
            
$sy = ($this->height $calc_height) / 2;
            
$sy2 $calc_height;
        }

        
// copy section
        
imagecopyresampled($this->temp_image$this->main_image00$sx$sy$mw$mh$sx2$sy2);
        return 
$this;
    }

    public function 
resize($mw$mh$pad=FALSE)
    
//----------------------------------------------------------------------------------------------------------
    // take main image and resize to tempimage using boundaries mw,mh (max width or max height)
    // this is proportional, pad to true will set it in the middle of area size
    //----------------------------------------------------------------------------------------------------------
    
{
        if (!
$this->_check_image()) return $this;

        
// calc new dimensions
        
if( $this->width $mw || $this->height $mh ) {
//            if( $this->width > $this->height ) { could calc wronf - Cole Thorsen swapped to his suggestion
            
if( ($this->width $this->height) > ($mw $mh) ) {
                
$tnw $mw;
                
$tnh $tnw $this->height $this->width;
            } else {
                
$tnh $mh;
                
$tnw $tnh $this->width $this->height;
            }
        } else {
            
$tnw $this->width;
            
$tnh $this->height;
        }
        
// clear temp image
        
$this->clear_temp();

        
// create a temp based on new dimensions
        
if ($pad)
        {
            
$tx $mw;
            
$ty $mh;
            
$px = ($mw $tnw) / 2;
            
$py = ($mh $tnh) / 2;
        }
        else
        {
            
$tx $tnw;
            
$ty $tnh;
            
$px 0;
            
$py 0;
        }
        
$this->temp_image imagecreatetruecolor($tx,$ty);

        
// check it
        
if(!is_resource($this->temp_image))
        {
            
$this->set_error('Unable to create temp image sized '.$tx.' x '.$ty);
            return 
$this;
        }

        
// if padding, fill background
        
if ($pad)
        {
            
$col $this->_html2rgb($this->background_colour);
            
$bg imagecolorallocate($this->temp_image$col[0], $col[1], $col[2]);
            
imagefilledrectangle($this->temp_image00$tx$ty$bg);
        }

        
// copy resized
        
imagecopyresampled($this->temp_image$this->main_image$px$py00$tnw$tnh$this->width$this->height);
        return 
$this;
    }

    public function 
stretch($mw,$mh)
    
//----------------------------------------------------------------------------------------------------------
    // take main image and resize to tempimage using boundaries mw,mh (max width or max height)
    // does not retain proportions
    //----------------------------------------------------------------------------------------------------------
    
{
        if (!
$this->_check_image()) return $this;

        
// clear temp image
        
$this->clear_temp();

        
// create a temp based on new dimensions
        
$this->temp_image imagecreatetruecolor($mw$mh);

        
// check it
        
if(!is_resource($this->temp_image))
        {
            
$this->set_error('Unable to create temp image sized '.$mh.' x '.$mw);
            return 
$this;
        }

        
// copy resized (stethced, proportions not kept);
        
imagecopyresampled($this->temp_image$this->main_image0000$mw$mh$this->width$this->height);
        return 
$this;
    }

    public function 
crop($x1$y1$x2$y2)
    
//----------------------------------------------------------------------------------------------------------
    // crop the main image to temp image using coords
    //----------------------------------------------------------------------------------------------------------
    
{
        if (!
$this->_check_image()) return $this;

        
// clear temp image
        
$this->clear_temp();

        
// check dimensions
        
if ($x1 || $y1 || $x2 $x1 $this->width || $y2 $y1 $this->height)
        {
            
$this->set_error('Invalid crop dimensions, either - passed or width/heigh too large '.$x1.'/'.$y1.' x '.$x2.'/'.$y2);
            return 
$this;
        }

        
// create a temp based on new dimensions
        
$this->temp_image imagecreatetruecolor($x2-$x1$y2-$y1);

        
// check it
        
if(!is_resource($this->temp_image))
        {
            
$this->set_error('Unable to create temp image sized '.$x2-$x1.' x '.$y2-$y1);
            return 
$this;
        }

        
// copy cropped portion
        
imagecopy($this->temp_image$this->main_image00$x1$y1$x2 $x1$y2 $y1);
        return 
$this;
    }

    private function 
_html2rgb($colour)
    
//----------------------------------------------------------------------------------------------------------
    // convert #aa0011 to a php colour array
    //----------------------------------------------------------------------------------------------------------
    
{
        if (
is_array($colour))
        {
            if (
count($colour)==3) return $colour;                                // rgb sent as an array so use it
            
$this->set_error('Colour error, array sent not 3 elements, expected array(r,g,b)');
            return 
false;
        }
        if (
$colour[0] == '#')
            
$colour substr($colour1);

        if (
strlen($colour) == 6)
        {
            list(
$r$g$b) = array($colour[0].$colour[1],
                                     
$colour[2].$colour[3],
                                     
$colour[4].$colour[5]);
        }
        elseif (
strlen($colour) == 3)
        {
            list(
$r$g$b) = array($colour[0].$colour[0], $colour[1].$colour[1], $colour[2].$colour[2]);
        }
        else
        {
            
$this->set_error('Colour error, value sent not #RRGGBB or RRGGBB, and not array(r,g,b)');
            return 
false;
        }

        
$r hexdec($r); $g hexdec($g); $b hexdec($b);

        return array(
$r$g$b);
    }

    public function 
rotate($angle)
    
//----------------------------------------------------------------------------------------------------------
    // rotate an image bu 0 / 90 / 180 / 270 degrees
    //----------------------------------------------------------------------------------------------------------
    
{
        
// validate we loaded a main image
        
if (!$this->_check_image()) return $this;

        
// if no operations, copy it for temp save
        
$this->_copy_to_temp_if_needed();

        
// set the colour
        
$col $this->_html2rgb($$this->background_colour);
        
$bg imagecolorallocate($this->temp_image$col[0], $col[1], $col[2]);

        
// rotate as needed
        
$this->temp_image imagerotate($this->temp_image$angle$bg);
        return 
$this;
    }

    public function 
make_watermark_text($text$fontfile$size=16$colour="#ffffff"$angle=0)
    
//----------------------------------------------------------------------------------------------------------
    // create an image from text that can be applied as a watermark
    // text is the text to write, $fontile is a ttf file that will be used $size=font size, $colour is the colour of text
    //----------------------------------------------------------------------------------------------------------
    
{
        
// check font file can be found
        
if (!file_exists($fontfile))
        {
            
$this->set_error('Could not locate font file "'.$fontfile.'"');
            return 
$this;
        }

        
// validate we loaded a main image
        
if (!$this->_check_image())
        {
            
$remove TRUE;
            
// no image loaded so make temp image to use
            
$this->main_image imagecreatetruecolor(1000,1000);
        }
        else
        {
            
$remove FALSE;
        }

        
// work out text dimensions
        
$bbox imageftbbox($size$angle$fontfile$text);
        
$bw abs($bbox[4] - $bbox[0]) + 1;
        
$bh abs($bbox[1] - $bbox[5]) + 1;
        
$bl $bbox[1];

        
// use this to create watermark image
        
if(is_resource($this->watermark_image)) imagedestroy($this->watermark_image);
        
$this->watermark_image imagecreatetruecolor($bw$bh);

        
// set colours
        
$col $this->_html2rgb($colour);
        
$font_col imagecolorallocate($this->watermark_image$col[0], $col[1], $col[2]);
        
$bg_col imagecolorallocate($this->watermark_image127128126);

        
// set method to use
        
$this->watermark_method 2;

        
// create bg
        
imagecolortransparent($this->watermark_image$bg_col);
        
imagefilledrectangle($this->watermark_image0,0$bw$bh$bg_col);

        
// write text to watermark
        
imagefttext($this->watermark_image$size$angle0$bh-$bl$font_col$fontfile$text);

        if (
$removeimagedestroy($this->main_image);
        return 
$this;
    }

    public function 
watermark($position$offset=8$abs=FALSE)
    
//----------------------------------------------------------------------------------------------------------
    // add a watermark to the image
    // position works like a keypad e.g.
    // 7 8 9
    // 4 5 6
    // 1 2 3
    // offset moves image inwards by x pixels
    // if abs is set then $position, $offset = direct placement coords
    //----------------------------------------------------------------------------------------------------------
    
{
        
// validate we loaded a main image
        
if (!$this->_check_image()) return $this;

        
// validate we have a watermark
        
if(!is_resource($this->watermark_image))
        {
            
$this->set_error("Can't watermark image, no watermark loaded/created");
            return 
$this;
        }

        
// if no operations, copy it for temp save
        
$this->_copy_to_temp_if_needed();

        
// get watermark width
        
$wm_w imageSX($this->watermark_image);
        
$wm_h imageSY($this->watermark_image);

        
// get temp widths
        
$temp_w imageSX($this->temp_image);
        
$temp_h imageSY($this->temp_image);

        
// check watermark will fit!
        
if ($wm_w $temp_w || $wm_h $temp_h)
        {
            
$this->set_error("Watermark is larger than image. WM: $wm_w x $wm_h Temp image: $temp_w x $temp_h");
            return 
$this;
        }

        if (
$abs)
        {
            
// direct placement
            
$dest_x $position;
            
$dest_y $offset;
        }
        else
        {
            
// do X position
            
switch ($position)
            {
                
// x left
                
case "7":
                case 
"4":
                case 
"1":
                    
$dest_x $offset;
                    break;
                
// x middle
                
case "8":
                case 
"5":
                case 
"2":
                    
$dest_x = ($temp_w $wm_w) /;
                    break;
                
// x right
                
case "9":
                case 
"6":
                case 
"3":
                    
$dest_x $temp_w $offset $wm_w;
                    break;
                default:
                    
$dest_x $offset;
                    
$this->set_error("Watermark position $position not in vlaid range 7,8,9 - 4,5,6 - 1,2,3");
            }
            
// do y position
            
switch ($position)
            {
                
// y top
                
case "7":
                case 
"8":
                case 
"9":
                    
$dest_y $offset;
                    break;
                
// y middle
                
case "4":
                case 
"5":
                case 
"6":
                    
$dest_y = ($temp_h $wm_h) /;
                    break;
                
// y bottom
                
case "1":
                case 
"2":
                case 
"3":
                    
$dest_y $temp_h $offset $wm_h;
                    break;
                default:
                    
$dest_y $offset;
                    
$this->set_error("Watermark position $position not in vlaid range 7,8,9 - 4,5,6 - 1,2,3");
            }

        }

        
// copy over temp image to desired location
        
if ($this->watermark_method == 1)
        {
            
// use back methods to do this, taken from php help files
            //$this->imagecopymerge_alpha($this->temp_image, $this->watermark_image, $dest_x, $dest_y, 0, 0, $wm_w, $wm_h, $this->watermark_transparency);

            
$opacity=$this->watermark_transparency;

            
// creating a cut resource
            
$cut imagecreatetruecolor($wm_w$wm_h);

            
// copying that section of the background to the cut
            
imagecopy($cut$this->temp_image00$dest_x$dest_y$wm_w$wm_h);

            
// inverting the opacity
            
$opacity 100 $opacity;

            
// placing the watermark now
            
imagecopy($cut$this->watermark_image0000$wm_w$wm_h);
            
imagecopymerge($this->temp_image$cut$dest_x$dest_y00$wm_w$wm_h$opacity);

        }
        else
        {
            
// use normal with selected transparency colour
            
imagecopymerge($this->temp_image$this->watermark_image$dest_x$dest_y00$wm_w$wm_h$this->watermark_transparency);
        }

        return 
$this;
    }

    public function 
border($width=5,$colour="#000")
    
//----------------------------------------------------------------------------------------------------------
    // add a solidborder  frame, coloured $colour to the image
    //----------------------------------------------------------------------------------------------------------
    
{
        
// validate we loaded a main image
        
if (!$this->_check_image()) return $this;

        
// if no operations, copy it for temp save
        
$this->_copy_to_temp_if_needed();

        
// get colour set for temp image
        
$col $this->_html2rgb($colour);
        
$border_col imagecolorallocate($this->temp_image$col[0], $col[1], $col[2]);

        
// get temp widths
        
$temp_w imageSX($this->temp_image);
        
$temp_h imageSY($this->temp_image);

        
// do border
        
for($x=0;$x<$width;$x++)
        {
            
imagerectangle($this->temp_image$x$x$temp_w-$x-1$temp_h-$x-1$border_col);
        }

        
// return object
        
return $this;
    }

    public function 
border_3d($width=5,$rot=0,$opacity=30)
    
//----------------------------------------------------------------------------------------------------------
    // overlay a black white border to make it look 3d
    //----------------------------------------------------------------------------------------------------------
    
{
        
// validate we loaded a main image
        
if (!$this->_check_image()) return $this;

        
// if no operations, copy it for temp save
        
$this->_copy_to_temp_if_needed();

        
// get temp widths
        
$temp_w imageSX($this->temp_image);
        
$temp_h imageSY($this->temp_image);

        
// create temp canvas to merge
        
$border_image imagecreatetruecolor($temp_w$temp_h);

        
// create colours
        
$black imagecolorallocate($border_image000);
        
$white imagecolorallocate($border_image255255255);
        switch (
$rot)
        {
            case 
:
                
$cols=array($white,$black,$white,$black);
                break;
            case 
:
                
$cols=array($black,$black,$white,$white);
                break;
            case 
:
                
$cols=array($black,$white,$black,$white);
                break;
            default :
                
$cols=array($white,$white,$black,$black);
        }
        
$bg_col imagecolorallocate($border_image127128126);

        
// create bg
        
imagecolortransparent($border_image$bg_col);
        
imagefilledrectangle($border_image0,0$temp_w$temp_h$bg_col);

        
// do border
        
for($x=0;$x<$width;$x++)
        {
            
// top
            
imageline($border_image$x$x$temp_w-$x-1$x$cols[0]);
            
// left
            
imageline($border_image$x$x$x$temp_w-$x-1$cols[1]);
            
// bottom
            
imageline($border_image$x$temp_h-$x-1$temp_w-1-$x$temp_h-$x-1$cols[3]);
            
// right
            
imageline($border_image$temp_w-$x-1$x$temp_w-$x-1$temp_h-$x-1$cols[2]);
        }

        
// merg with temp image
        
imagecopymerge($this->temp_image$border_image0000$temp_w$temp_h$opacity);

        
// clean up
        
imagedestroy($border_image);

        
// return object
        
return $this;
    }

    public function 
shadow($size=4$direction=3$colour="#444")
    
//----------------------------------------------------------------------------------------------------------
    // add a shadow to an image, this will INCREASE the size of the image
    //----------------------------------------------------------------------------------------------------------
    
{
        
// validate we loaded a main image
        
if (!$this->_check_image()) return $this;

        
// if no operations, copy it for temp save
        
$this->_copy_to_temp_if_needed();

        
// get the current size
        
$sx imagesx($this->temp_image);
        
$sy imagesy($this->temp_image);

        
// new image
        
$bu_image imagecreatetruecolor($sx$sy);

        
// check it
        
if(!is_resource($bu_image))
        {
            
$this->set_error('Unable to create shadow temp image sized '.$this->width.' x '.$this->height);
            return 
FALSE;
        }

        
// copy the current image to memory
        
imagecopy($bu_image$this->temp_image0000$sx$sy);

        
imagedestroy($this->temp_image);
        
$this->temp_image imagecreatetruecolor($sx+$size$sy+$size);

        
// fill background colour
        
$col $this->_html2rgb($this->background_colour);
        
$bg imagecolorallocate($this->temp_image$col[0], $col[1], $col[2]);
        
imagefilledrectangle($this->temp_image00$sx+$size$sy+$size$bg);

        
// work out position
        // do X position
        
switch ($direction)
        {
            
// x left
            
case "7":
            case 
"4":
            case 
"1":
                
$sh_x 0;
                
$pic_x $size;
                break;
            
// x middle
            
case "8":
            case 
"5":
            case 
"2":
                
$sh_x $size 2;
                
$pic_x $size 2;
                break;
            
// x right
            
case "9":
            case 
"6":
            case 
"3":
                
$sh_x $size;
                
$pic_x 0;
                break;
            default:
                
$sh_x $size;
                
$pic_x 0;
                
$this->set_error("Shadow position $position not in vlaid range 7,8,9 - 4,5,6 - 1,2,3");
        }
        
// do y position
        
switch ($direction)
        {
            
// y top
            
case "7":
            case 
"8":
            case 
"9":
                
$sh_y 0;
                
$pic_y $size;
                break;
            
// y middle
            
case "4":
            case 
"5":
            case 
"6":
                
$sh_y $size 2;
                
$pic_y $size 2;
                break;
            
// y bottom
            
case "1":
            case 
"2":
            case 
"3":
                
$sh_y $size;
                
$pic_y 0;
                break;
            default:
                
$sh_y $size;
                
$pic_y 0;
                
$this->set_error("Shadow position $position not in vlaid range 7,8,9 - 4,5,6 - 1,2,3");
        }

        
// create the shadow
        
$shadowcolour $this->_html2rgb($colour);
        
$shadow imagecolorallocate($this->temp_image$shadowcolour[0], $shadowcolour[1], $shadowcolour[2]);
        
imagefilledrectangle($this->temp_image$sh_x$sh_y$sh_x+$sx-1$sh_y+$sy-1$shadow);

        
// copy current image to correct location
        
imagecopy($this->temp_image$bu_image$pic_x$pic_y00$sx$sy);

        
// clean up and desstroy temp image
        
imagedestroy($bu_image);

        
//return object
        
return $this;
    }

    public function 
filter($function$arg1=NULL$arg2=NULL$arg3=NULL$arg4=NULL)
    
//----------------------------------------------------------------------------------------------------------
    // allows you to use the inbulit gd2 image filters
    //----------------------------------------------------------------------------------------------------------
    
{
        
// validate we loaded a main image
        
if (!$this->_check_image()) return $this;

        
// if no operations, copy it for temp save
        
$this->_copy_to_temp_if_needed();

        if (!
imagefilter($this->temp_image$function$arg1$arg2$arg3$arg4))
        {
            
$this->set_error("Filter $function failed");
        }

        
// return object
        
return $this;
    }

    public function 
round($radius=5,$invert=False,$corners="")
    
//----------------------------------------------------------------------------------------------------------
    // adds rounded corners to the output
    // using a quarter and rotating as you can end up with odd roudning if you draw a whole and use parts
    //----------------------------------------------------------------------------------------------------------
    
{
        
// validate we loaded a main image
        
if (!$this->_check_image()) return $this;

        
// if no operations, copy it for temp save
        
$this->_copy_to_temp_if_needed();

        
// check input
        
if ($corners==""$corners=array(True,True,True,True);
        if (!
is_array($corners) || count($corners)<>4)
        {
            
$this->set_error("Round failed, expected an array of 4 items round(radius,tl,tr,br,bl)");
            return 
$this;
        }

        
// create corner
        
$corner imagecreatetruecolor($radius$radius);

        
// turn on aa make it nicer
        
imageantialias($cornertrue);
        
$col $this->_html2rgb($this->background_colour);

        
// use bg col for corners
        
$bg imagecolorallocate($corner$col[0], $col[1], $col[2]);

        
// create our transparent colour
        
$xparent imagecolorallocate($corner127128126);
        
imagecolortransparent($corner$xparent);
        if (
$invert)
        {
            
// fill and clear bits
            
imagefilledrectangle($corner00$radius$radius$xparent);
            
imagefilledellipse($corner00, ($radius 2)-1, ($radius 2)-1$bg);
        }
        else
        {
            
// fill and clear bits
            
imagefilledrectangle($corner00$radius$radius$bg);
            
imagefilledellipse($corner$radius$radius, ($radius 2) , ($radius 2) , $xparent);
        }

        
// get temp widths
        
$temp_w imageSX($this->temp_image);
        
$temp_h imageSY($this->temp_image);

        
// do corners
        
if ($corners[0]) imagecopymerge($this->temp_image$corner0000$radius$radius100);
        
$corner imagerotate($corner2700);
        if (
$corners[1]) imagecopymerge($this->temp_image$corner$temp_w-$radius000$radius$radius100);
        
$corner imagerotate($corner2700);
        if (
$corners[2]) imagecopymerge($this->temp_image$corner$temp_w-$radius$temp_h-$radius00$radius$radius100);
        
$corner imagerotate($corner2700);
        if (
$corners[3]) imagecopymerge($this->temp_image$corner0$temp_h-$radius00$radius$radius100);

        
// return object
        
return $this;
    }


}
/* End of file image_moo.php */
/* Location: .system/application/libraries/image_moo.php */

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.0 [PHP 7 Update] [25.02.2019] maintained by KaizenLouie | C99Shell Github | Generation time: 0.0248 ]--