2009-07-27 3 views
1

Я написал небольшую функцию, чтобы взять URL-адрес и изменить размер изображения и сохранить его на локальном компьютере, однако сценарий занимает около 0,85 секунды для запуска, когда ему нужно создать папку и .64 секунды при изменении размера. В настоящее время я поддерживаю JPEG и PNG, как показано ниже.PHP Image Resize/Relocate - ускорение его

Мне интересно, есть ли более быстрый метод или что-то, что я делаю, это длится, так как текущие времена, которые у меня для меня неприемлемы, я бы очень хотел, чтобы это выполнялось быстрее.

Любые мысли/идеи приветствуются.

Спасибо!

function getTime() { 
     $timer = explode(' ', microtime()); 
     $timer = $timer[1] + $timer[0]; 
     return $timer; 
    } 

    function createThumb($thumb, $ids){ 
    $start = getTime(); 

    // File and new size 
    $filename = $thumb; 

    // Get new dimensions 
    $img1 = getimagesize($filename); 

    if ($img1[0] > $img1[1]) { 
     $percentage = ('72'/$img1[0]); 
    } else { 
     $percentage = ('72'/$img1[1]); 
    } 
    $new_width = $img1[0] * $percentage; 
    $new_height = $img1[1] * $percentage; 

    // Resample 
    $image_p = imagecreatetruecolor($new_width, $new_height); 
    if($img1['mime']=='image/png'){ 
     $image = imagecreatefrompng($filename); 
     imagealphablending($image_p, false); 
     imagesavealpha($image_p,true); 
     $transparent = imagecolorallocatealpha($image_p, 255, 255, 255, 127); 
     imagefilledrectangle($image_p, 0, 0, $new_width, $new_height, $transparent); 
     imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $img1[0], $img1[1]); 
    } 
    else { 
     $image = imagecreatefromjpeg($filename); 
    } 
    imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $img1[0], $img1[1]); 



    $imgPath = '/foo/bar/location/'.$ids; 
    $imgName =''; 
    //category, product, support 
    if(!is_dir($imgPath)) { 
     mkdir($imgPath, 0777); 
     chmod($imgPath, 0777); 
    } 

    if(!is_file($imgPath."/index.html")){ 
      $ourFileName = $imgPath."/index.html"; 
      $ourFileHandle = fopen($ourFileName, 'w') or die("can't open file"); 
      fwrite($ourFileHandle,'<html><body>401</body></html>'); 
      fclose($ourFileHandle);  
    } 

    // Output 
    if($img1['mime']=='image/png'){ 
     $name = rand(1, 156406571337); 
     $imgName = date("y_m_d_h_m_s").$name.'.png'; 
     imagepng($image_p, $imgPath.'/'.$imgName); 

    } else { 
     $name = rand(1, 156406571337); 
     $imgName = date("y_m_d_h_m_s").$name.'.jpg'; 
     imagejpeg($image_p, $imgPath.'/'.$imgName, 100); 
    } 
    $end = getTime(); 
    echo '<strong>createImage</strong>: '.round($end - $start,4).' seconden<br />'; 
    exit; 
    return $imgName; 

    } 
+1

Вам действительно нужно, чтобы это было сделано в полном PHP? Или вы можете использовать (например) imagemagick в командной строке? В качестве побочного элемента: если использование использует microtime (true), вам не придется взорвать/добавить две части, возвращенные им, где нет параметров :-) –

ответ

7

Frederico, библиотека GD просто медленно. : - \ Я бы предложил использовать библиотеку PHP ImageMagick. Синтаксис просто супер просто:

$image = new Imagick('image.jpg'); 
$image->thumbnailImage(100,0); // 100px wide, 0 = preserve aspect ratio 

Я надеюсь, что это вариант для вас.

+0

Давать это вихрь, никогда не использовал его раньше. Сообщите мне. Благодаря! – Petrogad

+0

Согласен. Imagick значительно быстрее. Производит также более качественные и мелкие файлы. – jason

+1

Также обратите внимание, что он часто недоступен на множестве хостов ... это то, что я всегда должен установить самостоятельно. – jason

1

В конечном счете, манипуляция изображениями - это процессорное и затратное время. 0,64 секунды не является возмутительным на изображении с приличным размером любым способом. ImageMagick, как было предложено выше, скорее всего, будет немного быстрее, но он все равно займет намного больше времени, чем вывод куча текста.

1

Обратите внимание, что упомянутый выше класс Imagick как hobodave недоступен в установках PHP до 5.1.3 и требует, по крайней мере, ImageMagick 6.2.4.

Если вам нужно, чтобы ваше приложение было обратно совместимым, вы должны рассмотреть возможность выполнения ImageMagick через командную строку.

Для запуска исполняемых файлов командной строки вы можете использовать backticks operator.