Изменение размера изображений в php
X
Заказать сайт
Заказать сайт

Изменение размера изображений в php

Бывает, что пользователь загружает на сервер картинку в большом размере. Чтобы не перегружать сайт огромными картинками в 5000px  с несколькими мегабайтами, рекомендую использовать сложную функцию на php, которая автоматически уменьшит размер фото и сэкономит на хостинге много пространства.

Это особенно актуально для каких-нибудь новостных порталов, где размер ширины или высоты картинки должен быть строго определенных размеров. Т.е. мы сможем создавать миниатюры фотографий при загрузке под определенный формат блока.

Также я позаботился о сжимаем качестве изображения. Вы сможете выбрать насколько качественной должна получиться картинка после сохранения в процентах. Даже если поставить всего 90%, вы не заметите разницы, однако размер картинки сильно уменьшится.

Скрипт изменения размеров фотографий на php

Сначала создайте в корне денвера папки original (здесь будут оригиналы фото) и rename (автоматом создадутся обработанные изображения). Затем, там же создайте файл index.php в UTF-8 без BOM и поместите в него сначала этот код:

<?php header("Content-Type: text/html; charset=utf-8");
set_time_limit(0);

foreach (glob("original/*.{jpg,JPG,jpeg,JPEG,png,PNG,gif,GIF}", GLOB_BRACE) as $filename) {
$imgrename1 = pathinfo($filename, PATHINFO_BASENAME);
resize($filename, "rename/".$imgrename1, 300, 240, '', 90);
}

Кстати, он чем-то напоминает мою предыдущую разработку. В glob() вы можете задать какие расширения картинок будет находить функция. А далее самое интересное - параметры функции resize():

  • $filename - имя исходного файла
  • "rename/".$imgrename1 - имя и путь конечного файла
  • 300 - желаемая ширина фото после обработки. Если поставить "" - то будет считаться автоматически, относительно высоты
  • 240 - требуемая высота картинки. Если поставить "" - будет автоматически рассчитываться в зависимости от ширины картинки
  • 90 - качество сохраняемой картинки в процентах. Чем меньше - тем меньше размер фото и соответственно, его качество

С параметрами разобрались, теперь добавьте после этого кода легендарную функцию по изменению ее размеров, над которой я работал много часов:

//изменение размеров
function resize($file_input, $file_output, $w_new, $h_new, $percent = false, $imgkash) {
list($w_i, $h_i, $type) = getimagesize($file_input);
if ($w_i || $h_i) {
$types = array('','gif','jpeg','png');
$ext = $types[$type];
if ($ext) {
$func = 'imagecreatefrom'.$ext;
$img = $func($file_input);
if ($percent) {
$w_new *= $w_i / 100;
$h_new *= $h_i / 100;}
if (!$w_new) $w_new = $h_new/($h_i/$w_i);
if (!$h_new) $h_new = $w_new/($w_i/$h_i);
$img_new = imagecreatetruecolor($w_new, $h_new);
if ($ext == "png") {
imagealphablending($img_new, false);
imagesavealpha($img_new, true); }
imagecopyresampled($img_new, $img, 0, 0, 0, 0, $w_new, $h_new, $w_i, $h_i);
if ($type == 2) {
imagejpeg($img_new,$file_output,$imgkash); imagedestroy($img_new);}
else {
$func = 'image'.$ext;
$func($img_new,$file_output); imagedestroy($img_new);}
}}
else echo 'Ошибка обработки...';
}
?>

Загрузите картинки в латинских символах в папку original и запустите скрипт с помощью index.php. Если вы все сделали правильно, обработанные картинки появятся в папке rename.

Обычно при установке параметров, ширина или высота задается конкретно, а второй параметр опускается "" - таким образом картинка уменьшается строго по одному параметру, а второй берется автоматически, без искажений. Если же указать оба параметра, то картинки будут растягиваться. Названия картинок в кириллице скрипт не обработает.

| | Изменение размера изображений в php | Бывает, что пользователь загружает на сервер картинку в большом размере. Чтобы не перегружать сайт огромными картинками в 5000px  с несколькими мегаба | https://blogprogram.ru/wp-content/uploads/2018/01/882-131x131.jpg