|
|
|
| Товарищи, подскажите чанику, как сделать уменьшенную копию хорошего качества?
Сейчас делаю так:
$img_width = ImageSX($src);
$img_height = ImageSY($src);
$img_new_width = $width;
$img_new_height = ($img_height/100)*($img_new_width/($img_width/100));
$img_dest = ImageCreateTrueColor($img_new_width,$img_new_height);
imagefill($img_dest, 0, 0, imagecolorallocate($img_dest, 255,255,255));
ImageCopyResized($img_dest, $src, 0, 0, 0, 0, $img_new_width, $img_new_height, $img_width, $img_height);
ImageJpeg($img_dest, $dest_file, 100);
ImageDestroy($src);
ImageDestroy($img_dest);
|
и уменьшенная копия сильно страдает в качестве, несмотря на то, что коэффицент качества при создании jpeg = 100.
Подсоветуйте что нибудь, пожалуйста. | |
|
|
|
|
|
|
|
для: Zilog
(03.10.2007 в 14:55)
| | Пользуюсь этим скриптом:
<?
function resizeimg($filename, $smallimage, $w, $h)
{
// Имя файла с масштабируемым изображением
$filename = "userfotos/".$filename;
// Имя файла с уменьшенной копией.
$smallimage = "userfotos/".$smallimage;
// определим коэффициент сжатия изображения, которое будем генерить
$ratio = $w/$h;
// получим размеры исходного изображения
$size_img = getimagesize($filename);
// Если размеры меньше, то масштабирования не нужно
if (($size_img[0]<$w) && ($size_img[1]<$h)) return true;
// получим коэффициент сжатия исходного изображения
$src_ratio=$size_img[0]/$size_img[1];
// Здесь вычисляем размеры уменьшенной копии, чтобы при масштабировании сохранились
// пропорции исходного изображения
if ($ratio<$src_ratio)
{
$h = $w/$src_ratio;
}
else
{
$w = $h*$src_ratio;
}
// создадим пустое изображение по заданным размерам
$dest_img = imagecreatetruecolor($w, $h);
$white = imagecolorallocate($dest_img, 255, 255, 255);
if ($size_img[2]==2) $src_img = imagecreatefromjpeg($filename);
else if ($size_img[2]==1) $src_img = imagecreatefromgif($filename);
else if ($size_img[2]==3) $src_img = imagecreatefrompng($filename);
// масштабируем изображение функцией imagecopyresampled()
// $dest_img - уменьшенная копия
// $src_img - исходной изображение
// $w - ширина уменьшенной копии
// $h - высота уменьшенной копии
// $size_img[0] - ширина исходного изображения
// $size_img[1] - высота исходного изображения
imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $w, $h, $size_img[0], $size_img[1]);
// сохраняем уменьшенную копию в файл
if ($size_img[2]==2) imagejpeg($dest_img, $smallimage);
else if ($size_img[2]==1) imagegif($dest_img, $smallimage);
else if ($size_img[2]==3) imagepng($dest_img, $smallimage);
// чистим память от созданных изображений
imagedestroy($dest_img);
imagedestroy($src_img);
return true;
}
?>
|
Вызываю так:
<?php
include "imgresize.php";
resizeimg($image, $image2, 100, 100);
// $image - имя картинки которую нужно порессайзить
// $image2 - имя маленькой поресайзенной картинки
?>
|
Пользуйся -) | |
|
|
|
|
|
|
|
для: Night_charter
(03.10.2007 в 16:51)
| | спасибо - все отлично работает :))
поясни, пожалуйста, что обозначают последние два параметра, которые передаются в функцию?? | |
|
|
|
|
|
|
|
для: Zilog
(03.10.2007 в 18:49)
| | $w - width - ширина
$h - height - высота | |
|
|
|
|
|
|
|
для: Бамси
(03.10.2007 в 19:04)
| | а если, скажем, я хочу указывать только ширину, а высоту он вычислял самостоятельно - сохраняя пропорции, это как?
просто не вижу смысла указывать 2 параметра, если можно один: непонимаю, кому может понадобиться грузить фото с нарушенными пропорциями... | |
|
|
|
|
|
|
|
для: Zilog
(03.10.2007 в 18:49)
| | Народ!
Поясните, пожалуйста, что это за два последние параметра?
По умолчнию - генерится картинка 100х66, хотя параметры равно 100 и 200 соответственно. | |
|
|
|
|
|
|
|
для: Zilog
(03.10.2007 в 21:04)
| | Можно сказать разобрался - первый параметр - ширина выходной картинки, второй - незнаю зачем. Высота выходной картинки считается автоматом, согласно пропорциям.
всё работает супер, ещё раз спасибо.
А второй параметр... а ну и хрен с ним пока. | |
|
|
|
|
|
|
|
для: Zilog
(03.10.2007 в 21:09)
| | Эти параметры задаются для того, чтобы уменьшенная копия не привышала лимит заданный при вызове функции. Например, в высоту и ширину не более 100 пикселей. | |
|
|
|
|
|
|
|
для: Night_Charter
(04.10.2007 в 10:43)
| | ГРАЖДАНЕ!!!
Глюк... :)
Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 9856 bytes)
|
При попытке загрузить jpeg размером боллее 1800 по ширине. По высоте не проверял пока.
Как починить ситуацию? | |
|
|
|
|
|
|
|
для: Zilog
(07.10.2007 в 14:12)
| | Превышен объем выделенной скрипту оперативной памяти (В вашем случае - 2 Мб, это очень мало, вообще).
Попробуйте
ini_set("memory_limit", "8M");
|
Если настройки сервера не запрещают, это увеличит выделенный лимит.
Проверить, запрещают или нет, можно так:
<?php
echo
"Было: ".ini_get("memory_limit").". <br>".
"Изменение ".((boolean) ini_set("memory_limit", "8M") ? "разрешено" : "запрещено").".<br>".
"Стало: ".ini_get("memory_limit");
?>
|
| |
|
|
|
|
|
|
|
для: Shiva
(07.10.2007 в 14:28)
| | Было: 16M.
Изменение запрещено.
Стало: 16M
вот что у меня показывает... | |
|
|
|
|
|
|
|
для: Zilog
(07.10.2007 в 14:12)
| | не загружать картинки размером больше 1800. Траффик и так в трубу летит, а вы ещё больше хотите узеров на бабки подставить. | |
|
|
|
|
|
|
|
для: Zilog
(07.10.2007 в 14:12)
| | Спасибо, сейчас попробую.
И еще вопрос - гружу фотку шириной в 1000 например, хочу сделать ее шириной в 600, а на выходе ширина все равно получается - 302.
Меньше 302 фотку сделать можно, а вот скажем 1000 переделать в 600 - никак не получается. Где тут глюк?
ВСЕ. РАЗОБРАЛСЯ - надо было подприавить 2 пераметр | |
|
|
|