Вход Регистрация
Файл: IPBMafia.ru_IPB_3.4.6_Final_Rus _Nulled/board/upload/ips_kernel/classImage.php
Строк: 289
<?php

/**
 * <pre>
 * Invision Power Services
 * IP.Board v3.4.6
 * Image Handler: create thumbnails, apply watermarks and copyright tests, save or display final image
 * Last Updated: $Date: 2012-05-10 16:10:13 -0400 (Thu, 10 May 2012) $
 * </pre>
 *
 * @author         $Author: bfarber $
 * @copyright    (c) 2001 - 2009 Invision Power Services, Inc.
 * @license        http://www.invisionpower.com/company/standards.php#license
 * @package        IP.Board
 * @subpackage    Kernel
 * @link        http://www.invisionpower.com
 * @since        Monday 5th May 2008 14:00
 * @version        $Revision: 10721 $
 *
 * GD Example
 * <code>
 * $image = new classImageGd();
 * $image->init( array(
 *                     'image_path'    => "/path/to/images/",
 *                     'image_file'    => "image_filename.jpg",
 *             )        );
 * 
 * if( $image->error )
 * {
 *     print $image->error;exit;
 * }
 * 
 * Set max width and height
 * $image->resizeImage( 600, 480 );
 * // Add a watermark
 * $image->addWatermark( "/path/to/watermark/trans.png" );
 * //$image->addCopyrightText( "Hello World!", array( 'color' => '#ffffff', 'font' => 3 ) );
 * $image->displayImage();
 * </code>
 */

/**
 * Bootstrapper
 * Picks GD or imagemagik
 */
class ips_kernel_image
{
    
/**
     * Loads correct class
     *
     * @param    string        [gd (for GD library)|im (for ImageMagick)]
     * @return    @e object
     */
    
static public function bootstrap$load='gd' )
    {
        if ( 
$load == 'im' )
        {
            require_once( 
IPS_KERNEL_PATH 'classImageImagemagick.php' );/*noLibHook*/
            
$img = new classImageImagemagick();
        }
        else
        {
            require_once( 
IPS_KERNEL_PATH 'classImageGd.php' );/*noLibHook*/
            
$img = new classImageGd();
        }
        
        return 
$img;
    }
}

/**
 * Image interface
 *
 */
interface interfaceImage
{
    
/**
     * Initiate image handler, perform any necessary setup
     *
     * @param    array         Necessary options to init module
     * @return    @e boolean
     */
    
public function init$opts=array() );
    
    
/**
     * Add a supported image type (assumes you have properly extended the class to add the support)
     *
     * @param    string         Image extension type to add support for
     * @return    @e boolean
     */
    
public function addImagetype$ext );
    
    
/**
     * Resizes and image, then crops an image to a fixed ratio
     *
     * @param    int        Width of final cropped image
     * @param    int        Height of final cropped image
     * @param    @e array
     */
    
public function croppedResize$width$height );

    
/**
     * Crops an image
     *
     * @param    int            Crop from X
     * @param    int            Crop from Y
     * @param    int            Width
     * @param    int            Height
     * @return    @e array
     */
    
public function crop$x1$y1$width$height );

    
/**
     * Resize image proportionately
     *
     * @param    integer     Maximum width
     * @param    integer     Maximum height
     * @param    boolean        Second pass of image for crop
     * @param    boolean        Instead of resizing image to same size, return false if the image doesn't need to be resized
     * @param    array        Canvas size - if larger than resized image, image will be placed in the center
     * @return    @e array
     */
    
public function resizeImage$width$height$secondPass=false$returnIfUnnecessary=false$canvas=array() );
    
    
/**
     * Write image to file
     *
     * @param    string         File location (including file name)
     * @return    @e boolean
     */
    
public function writeImage$path );
    
    
/**
     * Print image to screen
     *
     * @return    @e void
     */
    
public function displayImage();
    
    
/**
     * Add watermark to image
     *
     * @param    string         Watermark image path
     * @param    integer        [Optional] Opacity 0-100
     * @return    @e boolean
     */
    
public function addWatermark$path$opacity=100 );
    
    
/**
     * Add copyright text to image
     *
     * @param    string         Copyright text to add
     * @param    array        [Optional] Text options (color, background color, font [1-5])
     * @return    @e boolean
     */
    
public function addCopyrightText$text$textOpts=array() );

}

/**
 * Image abstract class
 *
 */
abstract class classImage
{
    
/**
     * Error encountered
     *
     * @var        string
     */
    
public $error                '';
    
    
/**
     * Image Path
     *
     * @var        string
     */
    
protected $image_path        '';
    
    
/**
     * Image File
     *
     * @var        string
     */
    
protected $image_file        '';
    
    
/**
     * Image path + file
     *
     * @var        string
     */
    
protected $image_full        '';
    
    
/**
     * Image dimensions
     *
     * @var        array
     */
    
protected $orig_dimensions    = array( 'width' => 0'height' => );
    
    
/**
     * Image current dimensions
     *
     * @var        array
     */
    
public $cur_dimensions        = array( 'width' => 0'height' => );
    
    
/**
     * Image Types Supported
     *
     * @var        array
     */
    
protected $image_types        = array( 'gif''jpeg''jpg''jpe''png' );
    
    
/**
     * Extension of image
     *
     * @var        string
     */
    
public $image_extension        '';
    
    
/**
     * Resize image anyways (e.g. if we have added watermark)
     *
     * @var        bool
     */
    
public $force_resize        false;

    
/**
     * Image handler constructor
     *
     * @return    @e oolean
     */
    
public function __construct()
    {
        return 
true;
    }
    
    
/**
     * Image handler desctructor
     *
     * @return    @e void
     */
    
public function __destruct()
    {
    }

    
/**
     * Cleans up paths, generates var $in_file_complete
     *
     * @param    string        Path to clean
     * @return     @e string
     */
    
protected function _cleanPaths$path='' )
    {
         
//---------------------------------------------------------
         // Remove trailing slash
         //---------------------------------------------------------
         
        
return rtrim$path'/' );
    }
    
    
/**
     * Add a supported image type (assumes you have properly extended the class to add the support)
     *
     * @param    string         Image extension type to add support for
     * @return    @e boolean
     */
    
public function addImagetype$ext )
    {
         
//---------------------------------------------------------
         // Add a supported image extension
         //---------------------------------------------------------
         
        
if( !in_array$ext$this->image_types ) )
        {
            
$this->image_types[] = $ext;
        }
        
        return 
true;
    }
    
    
/**
     * Checks to see if an uploaded image truly is an image
     *
     * @param    string    Image path
     * @return    @e mixed
     */
    
public function extractImageData$imagePath )
    {
        
$fileExt IPSText::getFileExtension$imagePath );
        
        
$img_attributes = @getimagesize$imagePath );
                
        if ( ! 
is_array$img_attributes ) or ! count$img_attributes ) )
        {
            return 
false;
        }
        else if ( ! 
$img_attributes[2] )
        {
            return 
false;
        }
        else if ( 
$img_attributes[2] == AND ( $fileExt == 'jpg' OR $fileExt == 'jpeg' ) )
        {
            return 
false;
        }
        
        
$return = array( 'width'    => $img_attributes[0],
                         
'height'   => $img_attributes[1],
                         
'fileType' => '' );
        
        switch( 
$img_attributes[2] )
        {
            case 
1:
                
$return['fileType'] = 'gif';
            break;
            case 
2:
                
$return['fileType'] = 'jpg';
            break;
            case 
3:
                
$return['fileType'] = 'png';
            break;
        }
        
        return 
$return;
    }
    
    
/**
    * Checks for XSS inside file.  If found, deletes file, sets error_no to 5 and returns
    *
    * @param    string        Image path
    * @return    @e boolean
    */
    
public function hasXssInfile$fileName )
    {
        
// HTML added inside an inline file is not good in IE...
        
$fh fopen$fileName'rb' );
        
        
$file_check fread$fh512 );
        
        
fclose$fh );
        
        if ( ! 
$file_check )
        {
            return 
true;
        }
        
# Thanks to Nicolas Grekas from comments at www.splitbrain.org for helping to identify all vulnerable HTML tags
        
else if ( preg_match'#<script|<html|<head|<title|<body|<pre|<table|<as+href|<img|<plaintext|<cross-domain-policy#si'$file_check ) )
        {
            return 
true;
        }
        
        return 
false;
    }
    
    
/**
     * Get new dimensions for resizing
     *
     * @param    integer     Maximum width
     * @param    integer     Maximum height
     * @return    @e array
     */
    
protected function _getResizeDimensions$width$height )
    {
         
//---------------------------------------------------------
         // Verify width and height are valid and > 0
         //---------------------------------------------------------
         
        
$width    intval($width);
        
$height    intval($height);

        if( !
$width OR !$height )
        {
            
$this->error        'bad_dimensions';
            return 
false;
        }
        
         
//---------------------------------------------------------
         // Is the current image already smaller?
         //---------------------------------------------------------
         
        
if( $width >= $this->cur_dimensions['width'] AND $height >= $this->cur_dimensions['height'] )
        {
            
$this->error        'already_smaller';
            return 
false;
        }
        
         
//---------------------------------------------------------
         // Return new dimensions
         //---------------------------------------------------------

        
return $this->_scaleImage( array(
                                        
'cur_height'    => $this->cur_dimensions['height'],
                                        
'cur_width'        => $this->cur_dimensions['width'],
                                        
'max_height'    => $height,
                                        
'max_width'        => $width,
                                )        );
    }

    
/**
     * Return proportionate image dimensions based on current and max dimension settings
     *
     * @param    array         [ cur_height, cur_width, max_width, max_height ]
     * @return    @e array
     */
    
protected function _scaleImage$arg )
    {
        
$ret = array(
                      
'img_width'  => $arg['cur_width'],
                      
'img_height' => $arg['cur_height']
                    );
        
        if ( 
$arg['cur_width'] > $arg['max_width'] )
        {
            
$ret['img_width']  = $arg['max_width'];
            
$ret['img_height'] = ceil( ( $arg['cur_height'] * ( ( $arg['max_width'] * 100 ) / $arg['cur_width'] ) ) / 100 );
            
$arg['cur_height'] = $ret['img_height'];
            
$arg['cur_width']  = $ret['img_width'];
        }
        
        if ( 
$arg['cur_height'] > $arg['max_height'] )
        {
            
$ret['img_height']  = $arg['max_height'];
            
$ret['img_width']   = ceil( ( $arg['cur_width'] * ( ( $arg['max_height'] * 100 ) / $arg['cur_height'] ) ) / 100 );
        }

        return 
$ret;
    }
}
Онлайн: 1
Реклама