У меня есть скрипт на PHP GD с простыми функциями изменения размера изображений в реальном времени на моем сайте, но этот процесс "съедает" все мое процессорное время ... Я использую VPS с 4 ядрами, и этого недостаточно.
Из тега изображения я вызываю файл PHP (<img src="image.php?file=XXX&width=XXX&height=XXX" alt="" />
) с именем изображения, новой шириной и новой высотой ... после этого в PHP я делаю следующие операции:
ob_start();
ini_set('max_execution_time', 0);
set_time_limit(0);
error_reporting(E_ALL^E_NOTICE^E_DEPRECATED);
date_default_timezone_set('Europe/Sofia');
header('Content-type: image/jpeg');
$url = $_GET['file'];
if(!empty($url) && file_exists($url) && is_file($url) && is_readable($url)){
$width = $_GET['width'];
$height = $_GET['height'];
list($width_orig, $height_orig) = getimagesize($url);
if(empty($width)) $width = $width_orig/($height_orig/$height);
if(empty($height)) $height = $height_orig/($width_orig/$width);
$ratio_orig = $width_orig/$height_orig;
if($width/$height > $ratio_orig) {
$width = $height*$ratio_orig;
} else {
$height = $width/$ratio_orig;
}
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($url);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
imagejpeg($image_p, null, 100);
imagedestroy($image_p);
imagedestroy($image);
}
ob_end_flush();
Я не понимаю, почему "есть", чтобы соответствовать времени процессора ... мой исходный размер изображения составляет 1920x2880 пикселей.
Как уменьшить загрузку моего процессора? Есть идеи?