Вход Регистрация
Файл: classes/image.class.php
Строк: 176
<?php
defined
('_VALID') or die('Restricted Access!');
class 
VImageConv
{
    private 
$srcWidth;
    private 
$srcHeight;
    private 
$srcType;
    private 
$dstWidth;
    private 
$dstHeight;
    private 
$dstType;
    private 
$srcImage;
    private 
$dstImage;
    private 
$imageIndentifer;
    private 
$newImageIdentifier;
    private 
$imageWidth;
    private 
$imageHeight;
    private 
$resizeType;
    private 
$jpgQuality;
    private 
$outputType;
    private 
$canvasWidth;
    private 
$canvasHeight;
    private 
$debug = false;
    public function 
__construct()
    {
        
$this->checkGDSupport();
        
$this->jpgQuality    = 90;
    }
    
    public function 
__destruct()
    {
        if( 
is_resource($this->imageIdentifier) )
            
imagedestroy($this->imageIdentifier);
        if( 
is_resource($this->newImageIdentifier) )
            
imagedestroy($this->newImageIdentifier);
    }
    
    public function 
process( $src, $dst, $type, $width, $height, $outputType = 'jpg' )
    {
        if( !
file_exists($src) || !is_file($src) )
            throw new 
Exception('Application Error. Image source file not found!');
        if( !
is_readable($src) )
            throw new 
Exception('Application Error. Could not read image src file!');
        
$dst_dir    = dirname($dst);
        if( !
file_exists($dst_dir) || !is_dir($dst_dir) )
            throw new 
Exception('Application Error. Destination directory could not be found!');
        if( !
is_writable($dst_dir) )
            throw new 
Exception('Application Error. Destination directory is not writable');
        
        
$this->srcImage        = $src;
        
$this->dstImage        = $dst;
        
$this->dstWidth        = (int)$width;
        
$this->dstHeight    = (int)$height;
        
$this->resizeType    = $type;
        
$this->outputType    = $outputType;
        
$this->getImageSize();
        
$this->setImageSize();
    }
    
    private function 
getImageSize()
    {
        
$imageData         = getimagesize($this->srcImage);
        
$this->srcWidth        = $imageData['0'];
        
$this->srcHeight    = $imageData['1'];
        switch( 
$imageData['2'] ) {
        case 
1:
            
$this->srcType        = 'gif';
            
$this->imageIdentifier    = imagecreatefromgif($this->srcImage);
            break;
        case 
2:
            
$this->srcType    = 'jpg';
            
$this->imageIdentifier    = imagecreatefromjpeg($this->srcImage);
            break;            
        case 
3: 
            
$this->srcType    = 'png';
            
$this->imageIdentifier    = imagecreatefrompng($this->srcImage);
            break;
        default:
            throw new 
Exception('Application Error. Invalid Image Type!');
        }
    }
    
    private function 
setImageSize()
    {
        switch(
$this->resizeType) {
        case 
'MAX_WIDTH':
            
$this->imageWidth    = ( $this->srcWidth > $this->dstWidth ) ? $this->dstWidth : $this->srcWidth;
            
$this->imageHeight    = intval(($this->imageWidth * $this->srcHeight) / $this->srcWidth);
            break;
        case 
'MAX_HEIGHT':
            
$this->imageHeight    = ( $this->srcHeight > $this->dstHeight ) ? $this->dstHeight : $this->srcHeight;
            
$this->imageWidth    = intval(($this->imageHeight * $this->srcWidth) / $this->srcHeight);
            break;
        case 
'ASPECT_RATIO':
            if( (
$this->srcHeight / $this->dstHeight) >= ($this->srcWidth / $this->dstWidth) ) {
                
$this->imageHeight    = ( $this->srcHeight > $this->dstHeight ) ? $this->dstHeight : $this->srcHeight;
                
$this->imageWidth    =  intval(($this->imageHeight * $this->srcWidth) / $this->srcHeight);
            } else {
                
$this->imageWidth    = ( $this->srcWidth > $this->dstWidth ) ? $this->dstWidth : $this->srcWidth;
                
$this->imageHeight    = intval(($this->imageWidth * $this->srcHeight) / $this->srcWidth);
            }
            break;
        case 
'EXACT':
            
$this->imageWidth    = $this->dstWidth;
            
$this->imageHeight    = $this->dstHeight;
            break;
        case 
'SAME':
            
$this->imageWidth    = $this->srcWidth;
            
$this->imageHeight    = $this->srcHeight;
            break;
        default:
            throw new 
Exception('Application Error. Invalid Resize Type!');
        }
        
        
$this->newImageIdentifier = imagecreatetruecolor( $this->imageWidth, $this->imageHeight );
    }
    
    public function 
save()
    {
        if( 
$this->debug ) {
            echo 
'JPG QUALITY :' .$this->jpgQuality. '<br>';
            echo 
'SRC WIDTH : ' .$this->srcWidth. '<br>';
            echo 
'SRC_HEIGHT : ' .$this->srcHeight. '<br>';
            echo 
'DST WIDTH : ' .$this->dstWidth. '<br>';
            echo 
'DST HEIGHT : ' .$this->dstHeight. '<br>';
            echo 
'NEW WIDTH : ' .$this->imageWidth. '<br>';
            echo 
'NEW HEIGHT : ' .$this->imageHeight. '<br>';
        }
    
        switch( 
$this->outputType ) {
        case 
'jpg':
            
imagejpeg($this->newImageIdentifier, $this->dstImage, $this->jpgQuality);
            break;
        case 
'gif':
            
imagegif($this->newImageIdentifier, $this->dstImage);
            break;
        case 
'png':
            
imagepng($this->newImageIdentifier, $this->dstImage);
            break;
        default:
            return 
false;
        }
    }
    
    public function 
resize( $save = false, $now = false )
    {
        
$positionX    = 0;
        
$positionY    = 0;
        if( isset(
$this->canvasWidth) && $this->canvasWidth > 0 && isset($this->canvasHeight) && $this->canvasHeight > 0 &&
            
$this->canvasWidth >= $this->imageWidth && $this->canvasHeight >= $this->imageHeight ) {
            
$positionX    = intval(($this->canvasWidth - $this->imageWidth) / 2);
            
$positionY    = intval(($this->canvasHeight - $this->imageHeight) / 2);
        }
        
        if( 
$this->debug ) {
            echo 
'POSITION X: ' .$positionX. '<br>';
            echo 
'POSITION Y: ' .$positionY. '<br>';
        }
        
        if ( 
$now ) {
            
$this->newImageIdentifier = imagecreatetruecolor($this->imageWidth, $this->imageHeight);
        }
        
        
imagecopyresampled( $this->newImageIdentifier, $this->imageIdentifier, $positionX, $positionY, 0 ,0 , $this->imageWidth, $this->imageHeight, $this->srcWidth, $this->srcHeight);
        
        if( 
$save ) {
            
$this->save();
        }
    }
    
    public function 
canvas( $width, $height, $color, $save = false )
    {
        
$this->canvasWidth          = $width;
        
$this->canvasHeight        = $height;
        
$this->newImageIdentifier     = imagecreatetruecolor($this->canvasWidth, $this->canvasHeight);
        
$rgb                  = $this->hex2rgb($color);
        
$color                  = imagecolorallocate($this->newImageIdentifier, $rgb['0'], $rgb['1'], $rgb['2']);
        
imagefill($this->newImageIdentifier, 0, 0, $color);
        
        
$this->resize();
        
        if( 
$save ) {
            
$this->save();
        }
    }
    
    public function 
crop( $x, $y, $w, $h, $save = false )
    {
        
imagecopyresampled( $this->newImageIdentifier, $this->imageIdentifier, 0, 0, $x, $y, $w, $h, $w, $h);
                
        if ( 
$save ) {
            
$this->save();
        }
    }
    
    public function 
watermark()
    {
    }
    
    public function 
rotate()
    {
    }
    
    public function 
flip()
    {
    }
    
    private function 
hex2rgb( $hex_code )
    {
        
$r    = substr($hex_code, 0, 2);
        
$g    = substr($hex_code, 2, 2);
        
$b    = substr($hex_code, 4, 2);
        
        return array(
base_convert($r, 16, 10), base_convert($g, 16, 10), base_convert($b, 16, 10));
    }
    
    private function 
checkGDSupport()
    {
        if( !
function_exists('gd_info') )
            throw new 
Exception('Application Error. Support for GD is not available!');
        
        
$gd_info = gd_info();


        if (
strnatcmp(phpversion(),'5.3') >= 0)
        {
            if( !
$gd_info['JPEG Support'] )
            throw new 
Exception('Application Error. Support for JPG is not available in GD!');
        }
        else
        {
            if( !
$gd_info['JPG Support'] )
            throw new 
Exception('Application Error. Support for JPG is not available in GD!');
        } 

        if( !
$gd_info['PNG Support'] )
            throw new 
Exception('Application Error. Support for PNG is not available in GD!');
        if( !
$gd_info['GIF Read Support'] || !$gd_info['GIF Create Support'] )
            throw new 
Exception('Application Error. Support for GIF is not available in GD!');
    }
}
?>
Онлайн: 0
Реклама