Imagecopyresampled против imagecopyresized

В документации PHP описание функций imagecopyresampled и imagecopyresized из библиотеки GD практически идентично. Обе эти функции служат для изменения размера изображения, и принимают одинаковые параметры, вот только результат их работы заметно отличается на изображениях truecolor (JPEG, PNG), как видно на примерах, расположеных ниже. Imagecopyresampled помимо изменения размеров изображения, еще и сглаживает его (бикубическое сглаживание), что положительно сказывается на внешнем виде картинки и ее размере - изображение занимает меньше места на винчестере, чем обработанное функцией imagecopyresized. Зато функция PHP библиотеки GD imagecopyresized работает намного быстрее, и соответственно меньше нагружает сервер. Среднее время обработки изображения размером 1600х1200 (оригинал) imagecopyresized - 0.003 сек, imagecopyresampled - 0.061 сек. Чем больше будет размер изображения, тем заметнее разница во времени обработки фотографии разными функциями GD.

Документацию по функциям библиотеки GD PHP imagecopyresampled() и imagecopyresized() можно посмотреть тут: php.net/imagecopyresampled (eng), php.net/imagecopyresized (eng).

imagecopyresampled imagecopyresized
Размер: 17 857 байт. Размер: 22 932 байт.

В большинстве случаев лучше всего использовать функцию GD imagecopyresampled, так как качество изображения получается лучше, при меньшем, в сравнении с imagecopyresized размере. Можно комбинировать эти 2 функции PHP, например, для уменьшения фотографии с 1600x1200 до 320x240 точек, сначала использовать imagecopyresized (уменьшение до 640x480 точек), а уже дальше imagecopyresampled (уменьшение с 640x480 до 320x240 точек). Таким способом достигается равновесие: увеличение скорости выполнения обработки изображений, при сохранении их приемлимого качества.

Ниже приведен листинг скрипта, с помощью которого можно протестировать скорость обработки изображений функциями imagecopyresized() и imagecopyresampled():

Тест скорости обработки изображений функциями imagecopyresized и imagecopyresampled
function script_time_count($time_start, $quantity_sings = 3)
  {
  $quantity_sings = intval($quantity_sings);
  if ($quantity_sings < 0 or $quantity_sings > 8)
    $quantity_sings = 3;
  $time_format = explode(' ', $time_start);
  $time_start = $time_format[1] + $time_format[0];
  $time_end = microtime();
  $time_format = explode(' ', $time_end);
  $time_end = $time_format[1] + $time_format[0];
  $all_time = round(($time_end - $time_start), $quantity_sings);
  return $all_time;
  }

$img_path = 'http://obovsem.org.ua/img/all/articles/25/gorod.jpg';
// Если фотография не загружается, скопируйте ее на свой сервер и смените путь $img_path
$tmp = getimagesize($img_path);
$new_width = 320;
$new_height = 240;
$counter = 10;
$round = 3;
$original_width = $tmp[0];
$original_height = $tmp[1];

$img_src = imagecreatefromjpeg($img_path);
$new_img = imagecreatetruecolor($new_width, $new_height);

for ($i = 1; $i <= $counter; $i++)
  {
  $time_start = microtime();
  imagecopyresampled($new_img, $img_src, 0, 0, 0, 0, $new_width, $new_height, $original_width, $original_height);
  $all_time += script_time_count($time_start, $round);
  }
$average_time_resampled = round($all_time / $counter, $round);

$all_time = 0;
for ($i = 1; $i <= $counter; $i++)
  {
  $time_start = microtime();
  imagecopyresized($new_img, $img_src, 0, 0, 0, 0, $new_width, $new_height, $original_width, $original_height);
  $all_time += script_time_count($time_start, $round);
  }
$average_time_resized = round($all_time / $counter, $round);

echo 'Среднее время работы imagecopyresampled(): <strong>'.$average_time_resampled.'</strong> сек.<br>
Среднее время работы imagecopyresized(): <strong>'
.$average_time_resized.'</strong> сек.<br>
Среднее время вычесленно из '
.$counter.' попыток для каждой функции.';

imagedestroy($img_src);
imagedestroy($new_img);


// http://obovsem.org.ua
Опубликовано: 2011/05/20
HTML-код ссылки на эту страницу:
<a href="https://petrenco.com/php.php?txt=25" target="_blank">Imagecopyresampled против imagecopyresized в PHP библиотеки GD</a>
14561
Добавить комментарий
Ваш e-mail: (не виден посетителям сайта)
Ваше имя:
Комментарий:
Символы с картинки:
Только выделенные поля формы добавления комментариев обязательны к заполнению.