|
|
|
| Эта функция из книги Головоломки на PHP для хакеров
<?php
function resizeimg($filename, $smallimage, $w, $h)
{
// 1. Коррекция параметров $w и $h
// Определим коэффициент сжатия изображения
$ratio = $w / $h;
// Получим размеры исходного изображения
list($width, $height) = getimagesize($filename);
// Если размеры меньше, то масштабирования не нужно
if (($width < $w) && ($height < $h))
{
copy($filename, $smallimage);
return true;
}
// получим коэффициент сжатия исходного изображения
$src_ratio = $width/ $height;
// Вычисляем размеры уменьшенной копии, чтобы
// при масштабировании сохранились
// пропорции исходного изображения
if ($ratio < $src_ratio) $h = $w/$src_ratio;
else $w = $h*$src_ratio;
// 2. Создание уменьшенной копии изображения
// Создаем пустое изображение
// размером $w x $h пикселов
$dest_img = imagecreatetruecolor($w, $h);
// Открываем файл, который будет подвергаться сжатию
$src_img = imagecreatefromjpeg($filename);
// Масштабируем изображение
imagecopyresampled($dest_img,
$src_img,
0,
0,
0,
0,
$w,
$h,
$width,
$height);
// Сохраняем уменьшенную копию в файл
imagejpeg($dest_img, $smallimage);
// Чистим память от созданных изображений
imagedestroy($dest_img);
imagedestroy($src_img);
return true;
}
?>
|
Просмотрел эту всю но так и не нашел параметра контролирующий степень сжатия.
Даже если загружать изображение того же разрешения, что и функция уменьшает, после действия этой функции изображения весит меньше.
Придумал этой функции интересное применение автоматическое создание уменьшанной копии, то есть загружаем одну фотку получаем еще и превью, учень удобно не нужно подготавливать изображения для загрзку, но так как они сжимаются клиенты не давольны.
Есть ли способ решить проблему?
Заранее благодарен! | |
|
|
|
|
|
|
|
для: Dimka31
(29.01.2009 в 14:24)
| | Здесь причина проблемы, третий параметр функции. По умолчанию 75%. | |
|
|
|
|
|
|
|
для: Dimka31
(29.01.2009 в 14:24)
| | Вот эта лучше функция, для трёх форматов и размер одним аргументом.
<?
function resize($file, $small, $r )
{
$img = getimagesize($file);
if (($img[0] < $r) && ( $img[1] < $r))
return true;
$w = $h = $r;
$s = $img[0] / $img[1];
if ($r < $s)
$h = $r / $s;
else
$w = $r * $s;
$dest = imagecreatetruecolor($w, $h);
$white = imagecolorallocate($dest, 255, 255, 255);
if ($img[2]==2) $src = imagecreatefromjpeg($file);
else if ($img[2]==1) $src = imagecreatefromgif($file);
else if ($img[2]==3) $src = imagecreatefrompng($file);
imagecopyresampled($dest, $src, 0, 0, 0, 0, $w, $h, $img[0], $img[1]);
if ($img[2]==2) imagejpeg($dest, $small, 90);
else if ($img[2]==1) imagegif($dest, $small, 90);
else if ($img[2]==3) imagepng($dest, $small, 90);
imagedestroy($dest);
imagedestroy($src);
return true;
}
// Аргументы - Уменьшаемый файл, путь до превью, максимальный размер
resize("1.jpg", "2.jpg", 50);
?>
|
| |
|
|
|