[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Ускорение кода
Kuzya
Здравствуйте. К сожалению я не сильно разбираюсь в работе с изображениями, поэтому прошу помощи у вас. Скажите пожалуйста как можно ускорить данный код ресайза:
PHP
public function resize($image_file,$w,$h='auto',$type)
    {
        switch(
$type)
        {
            case 
'image/jpeg':
                
$src imagecreatefromjpeg($image_file);
            break;
            case 
'image/png':
                
$src imagecreatefrompng($image_file);
            break;
            case 
'image/gif':
                
$src imagecreatefromgif($image_file);
            break;
            default:
                return 
false;
            break;
        }

        if(
$src === false) return false;

        list(
$width,$height)=getimagesize($image_file);
        if (
$width $w) return $src;

        
$a $width/$w;
        if(
$h == 'auto')
        {
            
$h ceil($height/$a);
        }

        
$tmp=imagecreatetruecolor($w,$h);

        
imagecopyresampled($tmp,$src,0,0,0,0,$w,$h,$width,$height);

        return 
$tmp;
    }




Спустя 22 минуты, 6 секунд (2.03.2009 - 10:57) kirik написал(а):
Этот код - никак smile.gif Он медленный?

Спустя 4 часа, 35 минут, 44 секунды (2.03.2009 - 15:33) jetistyum написал(а):
можно заюзать сторонние обработчики, например ImageMagick ... как? - гугли....

Спустя 2 дня, 7 часов, 34 минуты, 53 секунды (4.03.2009 - 23:08) Kuzya написал(а):
Спасибо. Есть ещё вот такой код для наложения водяного знака (нашёл в сети):
PHP
<?php

class watermark
{
    public function 
create_watermark$main_img_obj$watermark_img_obj$alpha_level 100 ) {
        
$alpha_level        /= 100;

        
$main_img_obj_w        imagesx$main_img_obj );
        
$main_img_obj_h        imagesy$main_img_obj );
        
$watermark_img_obj_w        imagesx$watermark_img_obj );
        
$watermark_img_obj_h        imagesy$watermark_img_obj );

        
$main_img_obj_min_x        floor( ( $main_img_obj_w ) - ( $watermark_img_obj_w ) );
        
$main_img_obj_max_x        ceil( ( $main_img_obj_w ) + ( $watermark_img_obj_w ) );
        
$main_img_obj_min_y        floor( ( $main_img_obj_h ) - ( $watermark_img_obj_h ) );
        
$main_img_obj_max_y        ceil( ( $main_img_obj_h ) + ( $watermark_img_obj_h ) );

        
$return_img        imagecreatetruecolor$main_img_obj_w$main_img_obj_h );

        for( 
$y 0$y $main_img_obj_h$y++ ) {
            for( 
$x 0$x $main_img_obj_w$x++ ) {
                    
$return_color        NULL;

                    
$watermark_x        $x $main_img_obj_min_x;
                    
$watermark_y        $y $main_img_obj_min_y;

                    
$main_rgb imagecolorsforindex$main_img_objimagecolorat$main_img_obj$x$y ) );


                if (        
$watermark_x >= && $watermark_x $watermark_img_obj_w && $watermark_y >= && $watermark_y $watermark_img_obj_h )
                {
                    
$watermark_rbg imagecolorsforindex$watermark_img_objimagecolorat$watermark_img_obj$watermark_x$watermark_y ) );


                    
$watermark_alpha        round( ( ( 127 $watermark_rbg['alpha'] ) / 127 ), );
                    
$watermark_alpha        $watermark_alpha $alpha_level;

                    
$avg_red$this->_get_ave_color$main_rgb['red'],$watermark_rbg['red'],$watermark_alpha );
                    
$avg_green        $this->_get_ave_color$main_rgb['green'],        $watermark_rbg['green'],        $watermark_alpha );
                    
$avg_blue$this->_get_ave_color$main_rgb['blue'],        $watermark_rbg['blue'],$watermark_alpha );

                    
$return_color        $this->_get_image_color$return_img$avg_red$avg_green$avg_blue );

                } else {
                    
$return_color        imagecolorat$main_img_obj$x$y );

                }

                
imagesetpixel$return_img$x$y$return_color );

            }
        }

        return 
$return_img;
    }

    public function 
_get_ave_color$color_a$color_b$alpha_level )
    {
         return 
round( ( ( $color_a * ( $alpha_level ) ) + ( $color_b $alpha_level ) ) );
    }

    public function 
_get_image_color($im$r$g$b)
    {
        
$c=imagecolorexact($im$r$g$b);
        if (
$c!=-1) return $c;
        
$c=imagecolorallocate($im$r$g$b);
        if (
$c!=-1) return $c;
        return 
imagecolorclosest($im$r$g$b);
    }
}


Очень сильно тормозит, особенно при обработке 3-4 изображений под ряд. Скажите пожалуйста где здесь самые тормозные места и чем их можно заменить?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.