|
|
|
| Привет народ. Хочу на лету размер картинки изменять. Т.е. в базе сидят картинки большие, а мне их то совсем маленькие вывести надо, то поболе. Подскажите как, плз | |
|
|
|
|
|
|
|
|
для: Byte
(08.07.2005 в 16:55)
| | Вот модификация того скрипта (по ссылке, приведенной Саней) для масштабирования на лету.
Файл img.php содержит код, масштабирующий изображение.
img.php
<?
// Здесь можно и нужно добавить код, проверяющий
// содержимое переменной $_GET["file"]
// Вдруг вам хакер или просто любопытствующий туда
// что-нибудь не то передаст
$filename = $_GET["file"];
// Вызываем функцию масштабирования
resizeimg($filename, 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);
$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) header('Content-type: image/jpg');
else if ($size_img[2]==1) header('Content-type: image/gif');
else if ($size_img[2]==3) header('Content-type: image/png');
// Выводим уменьшенную копию в поток вывода
if ($size_img[2]==2) imagejpeg($dest_img);
else if ($size_img[2]==1) imagegif($dest_img);
else if ($size_img[2]==3) imagepng($dest_img);
// чистим память от созданных изображений
imagedestroy($dest_img);
imagedestroy($src_img);
return true;
}
?>
|
Этот файл (img.php) нужно подставлять в параметр src тега <img> на страницу, где используются изображения.
<img src="img.php?file=img.jpg" border="0" alt="">
|
Имя файла, который необходимо преобразовать, передается в параметре ?file=img.jpg. И на странице отображается уже измененное изображение.
Скрипт поправлен | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(09.07.2005 в 09:04)
| | Малюсенькая поправка к коду от Дизайнера. Перед выводом нужно дать заголовки, т.е.
// Выводим уменьшенную копию в поток вывода
if ($size_img[2]==2) {header('Content-type: image/jpg'); imagejpeg($dest_img);}
|
и т.д.
{header('Content-type: image/jpg'); imagejpeg($dest_img);}
{header('Content-type: image/gif'); imagegif($dest_img);}
{header('Content-type: image/png'); imagepng($dest_img);}
В остальном всё ОК. | |
|
|
|
|
|
|
|
для: PHPFan
(10.07.2005 в 06:12)
| | Ещё мелкий глюк в строке $w = $h*$src_ratio; Надо $w = $h*$src_ratio+1;
Полностью собранная версия функции в аттаче. | |
|
|
|
|
|
|
|
для: PHPFan
(10.07.2005 в 06:12)
| | >Малюсенькая поправка к коду от Дизайнера
Да заголовки потерялись...
Там была еще одна особенность, не сразу бросающаяся в глаза.
$filename = "../".$filename;
|
Это остаток от реального приложения.
Скрипт поправлен и протестирован. | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(11.07.2005 в 06:44)
| | привет всем!
у меня картинка приходит из базы данных. А у приведенный код работает с файлами. Чего мне делать в моем случае? сохранять временный файл с картинкой или другие приемы имеются? | |
|
|
|
|
|
|
|
для: Byte
(12.07.2005 в 01:30)
| | Способ вывода изображений из базы без временных файлов описывается в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=5173 | |
|
|
|
|
|
|
|
для: cheops
(12.07.2005 в 01:34)
| | Ну верно. Только мы ведь ничего с изображением там не делаем. просто выводим его с помощью echo. а мне его еще и уменьшить надо предварительно, т.к. в базе храниться довольно крупный размер картинок. вот тут у меня и возникает проблема. у меня в переменной храниться бинарная картинка, а все функции тут применяемые для масштабирования работают с указателями. т.е. файлик открыли, ссылку на картинку получили и айда его в функции вставлять. так как мне в таком случае быть? | |
|
|
|
|
|
|
|
для: Byte
(12.07.2005 в 01:41)
| | >т.е. файлик открыли, ссылку на картинку получили и айда его в функции вставлять. так как мне в таком случае быть?
А сохраняйте изображения из базы во временные файлы и работайте далее с кодом, приведенным в той теме. | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(09.07.2005 в 09:04)
| | скрипт не работает с BMP. Как быть? | |
|
|
|
|
|
|
|
для: Mootch
(20.11.2005 в 22:10)
| | Никак. Библиотека GDLib не работает с bmp. | |
|
|
|