Класс для обработки и уменьшения размера фотографий на PHP

Возможности класса:
- пропорционально уменьшать размер фото по ширине либо по высоте
- уменьшить фото в процентном соотношении
- вписать фотографию в рамку определенного размера
- произвольное изменение размера фотографии
- изменить качество фотографии
- вывод сгенерированной фотографии без сохранения
- сохранение фотографии на сервере
- назначение фото прав доступа

class picture {
        
        private $image_file;
        
        public $image;
        public $image_type;
        public $image_width;
        public $image_height;
        
        
        public function __construct($image_file) {
                $this->image_file=$image_file;
                $image_info = getimagesize($this->image_file);
                $this->image_width = $image_info[0];
                $this->image_height = $image_info[1];
                switch($image_info[2]) {
                        case 1: $this->image_type = 'gif'; break;//1: IMAGETYPE_GIF
                        case 2: $this->image_type = 'jpeg'; break;//2: IMAGETYPE_JPEG
                        case 3: $this->image_type = 'png'; break;//3: IMAGETYPE_PNG
                        case 4: $this->image_type = 'swf'; break;//4: IMAGETYPE_SWF
                        case 5: $this->image_type = 'psd'; break;//5: IMAGETYPE_PSD
                        case 6: $this->image_type = 'bmp'; break;//6: IMAGETYPE_BMP
                        case 7: $this->image_type = 'tiffi'; break;//7: IMAGETYPE_TIFF_II (порядок байт intel)
                        case 8: $this->image_type = 'tiffm'; break;//8: IMAGETYPE_TIFF_MM (порядок байт motorola)
                        case 9: $this->image_type = 'jpc'; break;//9: IMAGETYPE_JPC
                        case 10: $this->image_type = 'jp2'; break;//10: IMAGETYPE_JP2
                        case 11: $this->image_type = 'jpx'; break;//11: IMAGETYPE_JPX
                        case 12: $this->image_type = 'jb2'; break;//12: IMAGETYPE_JB2
                        case 13: $this->image_type = 'swc'; break;//13: IMAGETYPE_SWC
                        case 14: $this->image_type = 'iff'; break;//14: IMAGETYPE_IFF
                        case 15: $this->image_type = 'wbmp'; break;//15: IMAGETYPE_WBMP
                        case 16: $this->image_type = 'xbm'; break;//16: IMAGETYPE_XBM
                        case 17: $this->image_type = 'ico'; break;//17: IMAGETYPE_ICO
                        default: $this->image_type = ''; break;
                }
                $this->fotoimage();
        }
        
        private function fotoimage() {
                switch($this->image_type) {
                        case 'gif': $this->image = imagecreatefromgif($this->image_file); break;
                        case 'jpeg': $this->image = imagecreatefromjpeg($this->image_file); break;
                        case 'png': $this->image = imagecreatefrompng($this->image_file); break;
                }
        }
        
        public function autoimageresize($new_w, $new_h) {
                $difference_w = 0;
                $difference_h = 0;
                if($this->image_width < $new_w && $this->image_height < $new_h) {
                        $this->imageresize($this->image_width, $this->image_height);
                }
                else {
                        if($this->image_width > $new_w) {
                                $difference_w = $this->image_width - $new_w;
                        }
                        if($this->image_height > $new_h) {
                                $difference_h = $this->image_height - $new_h;
                        }
                                if($difference_w > $difference_h) {
                                        $this->imageresizewidth($new_w);
                                }
                                elseif($difference_w < $difference_h) {
                                        $this->imageresizeheight($new_h);
                                }
                                else {
                                        $this->imageresize($new_w, $new_h);
                                }
                }
        }
        
        public function percentimagereduce($percent) {
                $new_w = $this->image_width * $percent / 100;
                $new_h = $this->image_height * $percent / 100;
                $this->imageresize($new_w, $new_h);
        }
        
        public function imageresizewidth($new_w) {
                $new_h = $this->image_height * ($new_w / $this->image_width);
                $this->imageresize($new_w, $new_h);
        }
        
        public function imageresizeheight($new_h) {
                $new_w = $this->image_width * ($new_h / $this->image_height);
                $this->imageresize($new_w, $new_h);
        }
        
        public function imageresize($new_w, $new_h) {
                $new_image = imagecreatetruecolor($new_w, $new_h);
                imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $new_w, $new_h, $this->image_width, $this->image_height);
                $this->image_width = $new_w;
                $this->image_height = $new_h;
                $this->image = $new_image;
        }
        
        public function imagesave($image_type='jpeg', $image_file=NULL, $image_compress=100, $image_permiss='') {
                if($image_file==NULL) {
                        switch($this->image_type) {
                                case 'gif': header("Content-type: image/gif"); break;
                                case 'jpeg': header("Content-type: image/jpeg"); break;
                                case 'png': header("Content-type: image/png"); break;
                        }
                }
                switch($this->image_type) {
                        case 'gif': imagegif($this->image, $image_file); break;
                        case 'jpeg': imagejpeg($this->image, $image_file, $image_compress); break;
                        case 'png': imagepng($this->image, $image_file); break;
                }
                if($image_permiss != '') {
                        chmod($image_file, $image_permiss);
                }
        }
        
        public function imageout() {
                imagedestroy($this->image);
        }
        
        public function __destruct() {
                
        }
}


Заюзывать довольно просто:

пропорционально изменяем размер изображение и сохраняем на сервере не изменяя расширения файла
полученное изображение не будет превышать по высоте 400 пикселей и по ширине 300
т.е. автоматически впишется в нужные размеры

$new_image = new picture('url или файл');
$new_image->autoimageresize(300, 400);
$new_image->imagesave($new_image->image_type, 'папка на сервере');
$new_image->imageout();


вывод на экран не изменяя расширения файла

$new_image = new picture('url или файл');
$new_image->autoimageresize(300, 400);
$new_image->imagesave($new_image->image_type, NULL);
$new_image->imageout();


сохраняем на сервере и выбираем тип файла на выходе

$new_image = new picture('url или файл');
$new_image->autoimageresize(300, 400);
$new_image->imagesave('png', 'папка на сервере');
$new_image->imageout();


ужимаем файл и выводим на экран

$new_image = new picture('url или файл');
$new_image->autoimageresize(300, 400);
$new_image->imagesave('jpeg', NULL, 75);
$new_image->imageout();


сохраняем на сервере, ужимаем и устанавливаем права доступа

$new_image = new picture('url или файл');
$new_image->autoimageresize(300, 400);
$new_image->imagesave('jpeg', 'папка на сервере', 75, 0777);
$new_image->imageout();


Уменьшаем изображение по ширине

$new_image = new picture('url или файл');
$new_image->imageresizewidth(300);
$new_image->imagesave($new_image->image_type, 'папка на сервере');
$new_image->imageout();


Уменьшаем изображение по высоте

$new_image = new picture('url или файл');
$new_image->imageresizeheight(400);
$new_image->imagesave($new_image->image_type, 'папка на сервере');
$new_image->imageout();


произвольно уменьшаем изображение не сохраняя пропорции

$new_image = new picture('url или файл');
$new_image->imageresize(300,400);
$new_image->imagesave($new_image->image_type, 'папка на сервере');
$new_image->imageout();


уменьшаем изображение в процентном соотношении

$new_image = new picture('url или файл');
$new_image->percentimagereduce(30);
$new_image->imagesave($new_image->image_type, 'папка на сервере');
$new_image->imageout();



Просмотров: 1641
13.02.2015, 22:55 -

Категория: Статьи » Программирование » PHP