|
|
|
| Добрый день!
Есть на сервере изображение размером например 1000px на 800px (photo1.jpg)
(пусть все изображения лежат в папке: img/photo1.jpg)
Необходимо в фотогалерее вывести превьюшки, т.е. автоматически уменьшить фотографии до заданных размеров.
Ниже приведена функция которая должна это выполнять, но что-то у меня не получается вывести изображение в браузер.
А как вывести изображение в браузер, если обращение к функции происходит уже после вывода текста на странице.
Пробовал
echo "<img src='".("img/photo1.jpg", 100, 100)."'>";
|
но ничего ((
Может кто сталкивался с такой проблемой ?
function resizeimg($filename, $w, $h)
{
$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);
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);
if (!imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $w, $h, $size_img[0], $size_img[1])) return false;
$path_parts = pathinfo($filename);
if($path_parts["extention"] == "jpg")
{
header("Content-type: image/jpeg");
imagejpeg($dest_img);
}
else if($path_parts["extention"] == "gif")
{
header("Content-type: image/gif");
imagejpeg($dest_img);
}
else if($path_parts["extention"] == "png")
{
header("Content-type: image/png");
imagejpeg($dest_img);
}
imagedestroy($dest_img);
imagedestroy($src_img);
return true;
}
|
| |
|
|
|
|
|
|
|
для: yura_040
(18.12.2009 в 14:01)
| | Вы забыли вызвать функцию. А вообще эту функцию нужно в отдельный файл вынести и обращаться к нему.
<img src="resize.php?name=<?=$filename?>">
|
<? // код файла resize.php
function resizeimg($filename, $w, $h)
{
// ...
// тело функции
// ...
}
if ( isset($_GET['name']) && file_exists($_GET['name']) )
resizeimg($_GET['name'], 100, 100);
|
Но это решение плохое, потому что фотография будет каждый раз заново уменьшаться, а эта операция довольно сильно загружает сервер. Так что нужно организовать проверку уже сгенерированного изображения и, если оно отсутствует, сгенерировать, сохранить на диск и отдать браузеру. | |
|
|
|
|
|
|
|
для: Саня
(18.12.2009 в 14:06)
| | А еще лучше готовить их при загрузке оригинала на сервер. | |
|
|
|
|
|
|
|
для: sim5
(18.12.2009 в 14:24)
| | Да дело в том, что уже сайт был сделан кем-то и сейчас превьюшки выводятся просто в теге img указана ширина 200px и получается, что на странице 40 картинок и они все пока загрузятся ... (т.к. оригинальная ширина и высота изображения другая 800, 1000 1500px и т.д.) долго очень, а позиций в базе 900...
Согласен, что конечно лучше маленькую превьюшку сделать при загрузке картинки на сервер. | |
|
|
|
|
|
|
|
для: yura_040
(18.12.2009 в 15:27)
| | их можно сохранять и на лету. Хотя лучше, конечно, сделать всё заранее.
А при обращении браузера, сервер может перенаправить последний на статический файл, предварительно его создав.
Факт тот, что закачивать картинки постоянно в любом случае не нужно. | |
|
|
|
|
|
|
|
для: yura_040
(18.12.2009 в 15:27)
| | А разве проблема написать временный скрип, запустив его один раз, и получить эскизы изображений? Ну и плюс чуточку подправить код, чтобы выводил эскизы без запроса к скрипту умуньшения. Ну не так уж и сложно все это сделать, как считаете? | |
|
|
|
|
|
|
|
для: sim5
(18.12.2009 в 15:38)
| | Вы правы. Я так и сделаю напишу временный скрипт, потом меньше проблем будет. | |
|
|
|
|
|
|
|
для: Саня
(18.12.2009 в 14:06)
| | Александр я совсем не увидел, когда писал , что опустил название функции. Я конечно к ней обращался, а вот
<img src="resize.php?name=<?=$filename?>">
| за это спасибо ))
Единственное, что у меня все равно не выводятся изображения при обращении таким способом
<img src="resize.php?name=<?=$filename?>">
|
Я поместил функцию в отдельный файл resize.php
// содержимое resize.php
function resizeimg($filename, $w, $h)
{
$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);
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);
if (!imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $w, $h, $size_img[0], $size_img[1])) return false;
$path_parts = pathinfo($filename);
if($path_parts["extention"] == "jpg")
{
header("Content-type: image/jpeg");
imagejpeg($dest_img);
}
else if($path_parts["extention"] == "gif")
{
header("Content-type: image/gif");
imagejpeg($dest_img);
}
else if($path_parts["extention"] == "png")
{
header("Content-type: image/png");
imagejpeg($dest_img);
}
imagedestroy($dest_img);
imagedestroy($src_img);
return true;
}
if ( isset($_GET['name']) && file_exists($_GET['name']) )
resizeimg($_GET['name'], 100, 100);
|
<img src="resize.php?name=img1.jpg">
|
Может кто-нибудь проверит эту функцию у себя? Чтобы знать работоспособная функция или где-то я ошибаюсь.... | |
|
|
|
|
|
|
|
для: yura_040
(18.12.2009 в 15:38)
| | У вас картинка находится в одной директории с resize.php, а файл, вызывающий resize.php, также в этом каталоге? Не верится что-то. С адресами файлов вы ошиблись, мне кажется. | |
|
|
|
|
|
|
|
для: neadekvat
(18.12.2009 в 15:55)
| | Вот так обращаюсь.... тоже ничего:
<img src="resize.php?name=images/img1.jpg">
|
| |
|
|
|
|
|
|
|
для: yura_040
(18.12.2009 в 16:03)
| | Используйте абсолютные пути. | |
|
|
|
|
|
|
|
для: yura_040
(18.12.2009 в 16:03)
| | > Используйте абсолютные пути.
И не через аргумент src их передавайте, а подставляйте в заготвленный адрес в функции:
<img src="resize.php?name=img1.jpg">
$src = '/images/' . $filename; | |
|
|
|
|
|
|
|
для: neadekvat
(18.12.2009 в 16:17)
| | Не работает что-то и с абсолютными путями ( и в адрес функции подставляю путь с картинкой тоже не работает.)
Ладно все равно уже другим способом решаю задачу.
Всем спасибо за участие в обсуждении )) | |
|
|
|
|
|
|
|
для: Саня
(18.12.2009 в 14:06)
| | Александр я совсем не увидел, когда писал , что опустил название функции. Я конечно к ней обращался, а вот
<img src="resize.php?name=<?=$filename?>">
| за это спасибо ))
Единственное, что у меня все равно не выводятся изображения при обращении таким способом
<img src="resize.php?name=<?=$filename?>">
|
Я поместил функцию в отдельный файл resize.php
// содержимое resize.php
function resizeimg($filename, $w, $h)
{
$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);
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);
if (!imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $w, $h, $size_img[0], $size_img[1])) return false;
$path_parts = pathinfo($filename);
if($path_parts["extention"] == "jpg")
{
header("Content-type: image/jpeg");
imagejpeg($dest_img);
}
else if($path_parts["extention"] == "gif")
{
header("Content-type: image/gif");
imagejpeg($dest_img);
}
else if($path_parts["extention"] == "png")
{
header("Content-type: image/png");
imagejpeg($dest_img);
}
imagedestroy($dest_img);
imagedestroy($src_img);
return true;
}
if ( isset($_GET['name']) && file_exists($_GET['name']) )
resizeimg($_GET['name'], 100, 100);
|
<img src="resize.php?name=img1.jpg">
|
Может кто-нибудь проверит эту функцию у себя? Чтобы знать работоспособная функция или где-то я ошибаюсь.... | |
|
|
|