Масштабирование изображений в PHP
В предыдущей статье я рассказал, как обрезать изображение на PHP. В этой же статье я расскажу, как масштабировать изображение на PHP, то есть либо сжать, либо растянуть.
Давайте сразу приведу код функции масштабирования изображения на PHP:
<?php
/*
$w_o и h_o - ширина и высота выходного изображения
*/
function resize($image, $w_o = false, $h_o = false) {
if (($w_o < 0) || ($h_o < 0)) {
echo "Некорректные входные параметры";
return false;
}
list($w_i, $h_i, $type) = getimagesize($image); // Получаем размеры и тип изображения (число)
$types = array("", "gif", "jpeg", "png"); // Массив с типами изображений
$ext = $types[$type]; // Зная "числовой" тип изображения, узнаём название типа
if ($ext) {
$func = 'imagecreatefrom'.$ext; // Получаем название функции, соответствующую типу, для создания изображения
$img_i = $func($image); // Создаём дескриптор для работы с исходным изображением
} else {
echo 'Некорректное изображение'; // Выводим ошибку, если формат изображения недопустимый
return false;
}
/* Если указать только 1 параметр, то второй подстроится пропорционально */
if (!$h_o) $h_o = $w_o / ($w_i / $h_i);
if (!$w_o) $w_o = $h_o / ($h_i / $w_i);
$img_o = imagecreatetruecolor($w_o, $h_o); // Создаём дескриптор для выходного изображения
imagecopyresampled($img_o, $img_i, 0, 0, 0, 0, $w_o, $h_o, $w_i, $h_i); // Переносим изображение из исходного в выходное, масштабируя его
$func = 'image'.$ext; // Получаем функция для сохранения результата
return $func($img_o, $image); // Сохраняем изображение в тот же файл, что и исходное, возвращая результат этой операции
}
/* Вызываем функцию с целью уменьшить изображение до ширины в 100 пикселей, а высоту уменьшив пропорционально, чтобы не искажать изображение */
resize("image.jpg", 100); // Вызываем функцию
?>
Вот такая полезная и простая функция легко позволяет сжимать и растягивать изображения на PHP, при этом при необходимости и сохранять пропорции.
-
- Михаил Русаков
Комментарии (7):
Спасибо!
Ответить
В этом случаи на браузер загружается изображения не 400х300, а 100х75(например), да? Я правильно понял? Значит результат не аналогично этому: <img src="pic.jpg" width="100">? И на скорость загрузки изображения влияет. Если да, то это то что я искал. Спасибо!
Ответить
Все, проверил ваш код. Это то что я искал. Спасибо! Супер статья!
Ответить
!!!
Ответить
И в правду очень полезная функция, уже в 7 раз меня спасает.
Ответить
Все скопировал, вставил. Но при написании кода. $img = imageCreateFromJpeg("./img_transaction/404.jpg"); $img1 = resize($img,200); imagejpeg($img1); Но вместо картинки выводится маленькое белое окошко. Если ф-цию resize убрать, то картинка выводится
Ответить
Отличный код, но он будет сжирать прозрачность у png и jpg, выкладываю дополнение: $img_o = imagecreatetruecolor($w_o, $h_o); /* Создаём дескриптор для выходного изображения */ if($ext == 'png' || $ext == 'gif') { /* Сохраняем прозрачность (альфа-канал) для png и gif */ imagealphablending($img_o, false); imagesavealpha($img_o, true); } imagecopyresampled($img_o, $img_i, 0, 0, 0, 0, $w_o, $h_o, $w_i, $h_i); /* Переносим изображение из исходного в выходное, масштабируя его */ Вставлять внутри функции, начало и конец я указал
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.