Вход Регистрация
Файл: 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 && isset($this->canvasHeight) && $this->canvasHeight &&
            
$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,$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->newImageIdentifier00$color);
        
        
$this->resize();
        
        if( 
$save ) {
            
$this->save();
        }
    }
    
    public function 
crop$x$y$w$h$save false )
    {
        
imagecopyresampled$this->newImageIdentifier$this->imageIdentifier00$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_code02);
        
$g    substr($hex_code22);
        
$b    substr($hex_code42);
        
        return array(
base_convert($r1610), base_convert($g1610), base_convert($b1610));
    }
    
    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!');
    }
}
?>
Онлайн: 2
Реклама