PHP Image Resize / Relocate – Ускорение

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

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

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

Спасибо!

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; } 

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

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

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

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

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

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

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