Повышение производительности при использовании этой функции создания изображений - PullRequest
0 голосов
/ 19 мая 2010

Я использую GD2 и функции изображения, чтобы взять строку, а затем преобразовать ее в изображение, используя разные шрифты разных размеров. Функция, которую я использую, приведена ниже.

В настоящее время это довольно быстро, но недостаточно быстро. Функция вызывается примерно 20 раз на пользователя, и генерируемые изображения всегда новые (разные), поэтому кэширование не поможет!

Я надеялся получить некоторые идеи о том, как сделать эту функцию быстрее. Может быть, предоставить больше оперативной памяти для запуска сценария? Что-нибудь еще, что является специфическим для этой функции PHP?

Что-нибудь еще, что я могу сделать, чтобы настроить производительность этой функции?

  function generate_image($save_path, $text, $font_path, $font_size){

    $font = $font_path;

    /*
    * I have simplifed the line below, its actually a function that works out the size of the box
    * that is need for each image as the image size is different based on font type, font size etc
    */
    $measure = array('width' => 300, 'height'=> 120);

    if($measure['width'] > 900){ $measure['width'] = 900; }

    $im = imagecreatetruecolor($measure['width'], $measure['height']); 
    $white = imagecolorallocate($im, 255, 255, 255);
    $black = imagecolorallocate($im, 0, 0, 0);

    imagefilledrectangle($im, 0, 0, $measure['width'], $measure['height'], $white);     

    imagettftext($im, $font_size, 0, $measure['left'], $measure['top'], $black, $font, '    '.$text);

    if(imagepng($im, $save_path)){

        $status = true;

    }else{

        $status = false;

    }

    imagedestroy($im);

    return $status;

}

Спасибо всем за помощь

Ответы [ 2 ]

1 голос
/ 19 мая 2010

Я думаю, что это хорошо

0 голосов
/ 19 мая 2010

Вместо того, чтобы каждый раз создавать новое изображение, вы можете иметь пустой файл PNG (мы уже знаем, что максимальная ширина составляет 900 пикселей, у вас есть фиксированная максимальная высота, которую вы можете использовать?), Откройте ее, добавьте свой текст, а затем обрежьте его (см. imagecopy ()).

Я не уверен, но это может быть быстрее, чем то, что вы сейчас делаете.

...