Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2012, 01:38   #1
xzxz
 
Регистрация: 29.05.2011
Сообщений: 6
Восклицание Уменьшение размера изображения на php уменьшение качества картинки пример class php jpeg gif png

Готовое решение
для тех кто ищет в поисковике

В гугле найти пример сложнее чем написать самому
Решил написать свой класс для обработки и уменьшения размера фотографий

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

PHP код:
<?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->image0000$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() {
        
    }
    
}
?>
Написано исключительно для сайта http://nagon.net/knigi.php
xzxz вне форума Ответить с цитированием
Старый 18.11.2012, 01:38   #2
xzxz
 
Регистрация: 29.05.2011
Сообщений: 6
По умолчанию

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


пропорционально изменяем размер изображение и сохраняем на сервере не изменяя расширения файла
полученное изображение не будет превышать по высоте 400 пикселей и по ширине 300
т.е. автоматически впишется в нужные размеры
PHP код:
$new_image = new picture('url или файл');
$new_image->autoimageresize(300400);
$new_image->imagesave($new_image->image_type'папка на сервере');
$new_image->imageout(); 
вывод на экран не изменяя расширения файла
PHP код:
$new_image = new picture('url или файл');
$new_image->autoimageresize(300400);
$new_image->imagesave($new_image->image_typeNULL);
$new_image->imageout(); 
сохраняем на сервере и выбираем тип файла на выходе
PHP код:
$new_image = new picture('url или файл');
$new_image->autoimageresize(300400);
$new_image->imagesave('png''папка на сервере');
$new_image->imageout(); 
ужимаем файл и выводим на экран
PHP код:
$new_image = new picture('url или файл');
$new_image->autoimageresize(300400);
$new_image->imagesave('jpeg'NULL75);
$new_image->imageout(); 
сохраняем на сервере, ужимаем и устанавливаем права доступа
PHP код:
$new_image = new picture('url или файл');
$new_image->autoimageresize(300400);
$new_image->imagesave('jpeg''папка на сервере'750777);
$new_image->imageout(); 
Уменьшаем изображение по ширине
PHP код:
$new_image = new picture('url или файл');
$new_image->imageresizewidth(300);
$new_image->imagesave($new_image->image_type'папка на сервере');
$new_image->imageout(); 
Уменьшаем изображение по высоте
PHP код:
$new_image = new picture('url или файл');
$new_image->imageresizeheight(400);
$new_image->imagesave($new_image->image_type'папка на сервере');
$new_image->imageout(); 
произвольно уменьшаем изображение не сохраняя пропорции
PHP код:
$new_image = new picture('url или файл');
$new_image->imageresize(300,400);
$new_image->imagesave($new_image->image_type'папка на сервере');
$new_image->imageout(); 
уменьшаем изображение в процентном соотношении
PHP код:
$new_image = new picture('url или файл');
$new_image->percentimagereduce(30);
$new_image->imagesave($new_image->image_type'папка на сервере');
$new_image->imageout(); 
xzxz вне форума Ответить с цитированием
Старый 19.11.2012, 11:11   #3
masax
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 248
По умолчанию

решил похвастаться? )

http://www.phpclasses.org/
не смотрел?
Контакты
skype, почта: bm@kwax.ru
masax вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VCL vs KOL. Уменьшение размера программы. Lier Общие вопросы Delphi 11 03.05.2012 14:23
Как избежать сужения (уменьшение размера) пикселей изображения, при включенном свойстве Stretch? Лукманов Александр Мультимедиа в Delphi 8 26.10.2009 09:52
Уменьшение размера формул Fierce Microsoft Office Word 2 25.05.2009 10:25
Уменьшение размера ехе файлов Terran Общие вопросы Delphi 20 23.01.2008 23:03