Часто нужные и пользительные функции обработки изображений (масштабирование и обрезание) от Михаила Русакова.
- Код функции масштабирования изображения на 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;
}
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); // Сохраняем изображение в тот же файл, что и исходное, возвращая результат этой операции
}
resize("image.jpg", 100); // Вызываем функцию
?>
Функция легко позволяет сжимать и растягивать изображения на PHP, при этом при необходимости и сохранять пропорции.
- Обрезание изображения в PHP:
<?php
/*
$x_o и $y_o - координаты левого верхнего угла выходного изображения на исходном
$w_o и h_o - ширина и высота выходного изображения
*/
function crop($image, $x_o, $y_o, $w_o, $h_o) {
if (($x_o < 0) || ($y_o < 0) || ($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;
}
if ($x_o + $w_o > $w_i) $w_o = $w_i - $x_o; // Если ширина выходного изображения больше исходного (с учётом x_o), то уменьшаем её
if ($y_o + $h_o > $h_i) $h_o = $h_i - $y_o; // Если высота выходного изображения больше исходного (с учётом y_o), то уменьшаем её
$img_o = imagecreatetruecolor($w_o, $h_o); // Создаём дескриптор для выходного изображения
imagecopy($img_o, $img_i, 0, 0, $x_o, $y_o, $w_o, $h_o); // Переносим часть изображения из исходного в выходное
$func = 'image'.$ext; // Получаем функция для сохранения результата
return $func($img_o, $image); // Сохраняем изображение в тот же файл, что и исходное, возвращая результат этой операции
}
crop("image.jpg", 100, 100, 200, 50); // Вызываем функцию
?>
В CSS есть возможность чётко задать размеры изображения, но не стоит изображение 1600×1200 выводить с размером 160×120, так как сам файл будет грузиться очень долго. Вдобавок, если требуется не просто некая ширина, но и высота, например, 150×150, то через CSS можно сильно исказить изображение, поскольку пропорции у него могут быть другие.
Комментарии:
Нет комментариев к этой статье.