/**
* Function resize images
* Функция изменения изображения для превьюв
* @param string $src - дериктория исходного файла
* @param string $dest - имя генерируемого файла
* @param int $width, $height - ширина и высота генерируемого изображения, в пикселях
* @param int $quality - качество генерируемого JPEG, по умолчанию - максимальное (80)
* @return value - сообщение о ходе выполнения
*/
function imgResize($src, $dest, $width, $height, $quality = 80)
{
if(!file_exists($src)) return false;
$size = getimagesize($src);
if($size === false) return false;
// Определяем исходный формат по MIME-информации, предоставленной
// функцией getimagesize, и выбираем соответствующую формату
// imagecreatefrom-функцию.
$format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
$icfunc = 'imagecreatefrom' . $format;
if (!function_exists($icfunc)) return false;
$src_x = 0; // Точка координат по оси X в оригинальном изображении для выделения копируемой области
$src_y = 0; // Точка координат по оси У в оригинальном изображении для выделения копируемой области
$src_w = $size[0]; // Ширина прямоугольника копируемой области
$src_h = $size[1]; // Высота прямоугольника копируемой области
if($width === $height)
{
if($size[0] >= $size[1])
{
$difference = $size[0] - $size[1]; // Получаем разницу между шириной и высотой
$src_x = ceil($difference / 2); // Точка координат (половина разницы) по оси Х в оригинальном изображении для выделения копируэмой области
$src_w = $size[0] - $difference; // Ширина прямоугольника копируэмой области
}
else
{
$difference = $size[1] - $size[0];
$src_y = ceil($difference / 2);
$src_h = $size[1] - $difference;
}
}
else
{
if($size[0] >= $size[1])
{
$scale = round($size[0] / $width, 2);
$width = floor($size[0] / $scale);
$height = floor($size[1] / $scale);
}
else
{
$scale = round($size[1] / $height, 2);
$width = floor($size[0] / $scale);
$height = floor($size[1] / $scale);
}
}
$isrc = $icfunc($src);
$idest = imagecreatetruecolor($width, $height);
imagecopyresampled($idest, $isrc, 0, 0, $src_x, $src_y, $width, $height, $src_w, $src_h);
imagejpeg($idest, $dest, $quality);
imagedestroy($isrc);
imagedestroy($idest);
return true;
}
Её работа:
- если хотим получить миниатюру квадратного размера, задаем в параметры равные стороны;
- если хотим получить изображение меньшего размера но при этом сохранить пропорции, вводим ширину и высоту прямоугольника.
У меня на локальном сервере, выполнение этих двух функций и загрузка изображения занимает более 5 сек.
$extensions = array('JPG', 'jpg', 'JPEG', 'jpeg', 'PNG', 'png', 'GIF', 'gif');
$message = uploadHandle(5000, $extensions, $upload_dir); // Загружаем изображение на сервер (данная функция в курсах)
$info = $message['error'] ? $message['error'] : $message['info'];
if(file_exists($upload_dir . $_FILES['file']['name'])) // Если изображение загружено
{
imgResize($upload_dir.$_FILES['file']['name'], $upload_dir.$_FILES['file']['name'], 900,675);
$preview = imgResize($upload_dir.$_FILES['file']['name'], // Создаем новое изображение для предосмотра из уже загруженного
$upload_dir.'preview/small_'.$_FILES['file']['name'],
120,
120
);
Вопрос:
С загрузкой изображения понятно, там скорость зависит от скорости передачи, а как быть с этой функцией, возможно ли оптимизировать её работу и скорость выполнения?
Спустя 23 минуты, 11 секунд (31.01.2011 - 11:10) linker написал(а):
На фоне
$icfunc = 'imagecreatefrom' . $format;явный вызов
imagejpeg($idest, $dest, $quality);смотрится нелогичным.
Спустя 4 минуты, 46 секунд (31.01.2011 - 11:15) Evilsoul написал(а):
linker
ты о том что своему формату свою функцию?
ты о том что своему формату свою функцию?
Спустя 2 минуты, 36 секунд (31.01.2011 - 11:17) linker написал(а):
Ну вообще да. imagecreatetruecolor() для gif'а как-то не катит.
Спустя 8 минут, 19 секунд (31.01.2011 - 11:26) Evilsoul написал(а):
ну в мануале ПШП юзают imagecreatetruecolor() для гиф
эти можно было бы подкрутить на нужный формат, спасибо за совет
но вопрос остается, так как я использовал для теста в основном JPG
imagejpeg($idest, $dest, $quality);
эти можно было бы подкрутить на нужный формат, спасибо за совет
но вопрос остается, так как я использовал для теста в основном JPG
Спустя 10 часов, 15 минут, 6 секунд (31.01.2011 - 21:41) Evilsoul написал(а):
эй, знатоки, где вы? что всё, больше советов нет? (
_____________
Кто хочет, ищет возможности, кто не хочет - причины. /_ К. Маркс
Истенно велик тот человек который сумел овладеть своим временем. /_Гесиод VIII-VII вв. до Р. Х.
Медлительный непрерывно борится с бедами всю жизнь. /_Гесиод VIII-VII вв. до Р. Х.
Для того что бы увидеть радугу нужно пережить дождь.
Женщины: Хочется чего-то красного но синего.