Я написал небольшую функцию, чтобы взять 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;
}
Вам действительно нужно, чтобы это было сделано в полном PHP? Или вы можете использовать (например) imagemagick в командной строке? В качестве побочного элемента: если использование использует microtime (true), вам не придется взорвать/добавить две части, возвращенные им, где нет параметров :-) –