Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: изменение размеров изображения на лету
 
 автор: Byte   (08.07.2005 в 16:55)   письмо автору
 
 

Привет народ. Хочу на лету размер картинки изменять. Т.е. в базе сидят картинки большие, а мне их то совсем маленькие вывести надо, то поболе. Подскажите как, плз

   
 
 автор: Саня   (08.07.2005 в 17:10)   письмо автору
 
   для: Byte   (08.07.2005 в 16:55)
 

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=145&page=1

   
 
 автор: glsv (Дизайнер)   (09.07.2005 в 09:04)   письмо автору
 
   для: Byte   (08.07.2005 в 16:55)
 

Вот модификация того скрипта (по ссылке, приведенной Саней) для масштабирования на лету.
Файл img.php содержит код, масштабирующий изображение.
img.php

<? 
   
// Здесь можно и нужно добавить код, проверяющий 
   // содержимое переменной $_GET["file"] 
   // Вдруг вам хакер или просто любопытствующий туда 
   // что-нибудь не то передаст 
  
$filename $_GET["file"]; 
  
// Вызываем функцию масштабирования 
  
resizeimg($filename100,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_img255255255);         
     
    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_img0000$w$h$size_img[0], $size_img[1]);                  

    
// Выводим уменьшенную копию в поток вывода 
    
if ($size_img[2]==2)  header('Content-type: image/jpg');                        
    else if (
$size_img[2]==1header('Content-type: image/gif');                        
    else if (
$size_img[2]==3header('Content-type: image/png'); 
    
// Выводим уменьшенную копию в поток вывода 
    
if ($size_img[2]==2)  imagejpeg($dest_img);                        
    else if (
$size_img[2]==1imagegif($dest_img);                        
    else if (
$size_img[2]==3imagepng($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. И на странице отображается уже измененное изображение.

Скрипт поправлен

   
 
 автор: PHPFan   (10.07.2005 в 06:12)   письмо автору
 
   для: 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 в 09:55)   письмо автору
 
   для: PHPFan   (10.07.2005 в 06:12)
 

Ещё мелкий глюк в строке $w = $h*$src_ratio; Надо $w = $h*$src_ratio+1;
Полностью собранная версия функции в аттаче.

   
 
 автор: glsv (Дизайнер)   (11.07.2005 в 06:44)   письмо автору
 
   для: PHPFan   (10.07.2005 в 06:12)
 

>Малюсенькая поправка к коду от Дизайнера
Да заголовки потерялись...
Там была еще одна особенность, не сразу бросающаяся в глаза.

$filename = "../".$filename;

Это остаток от реального приложения.

Скрипт поправлен и протестирован.

   
 
 автор: Byte   (12.07.2005 в 01:30)   письмо автору
 
   для: glsv (Дизайнер)   (11.07.2005 в 06:44)
 

привет всем!

у меня картинка приходит из базы данных. А у приведенный код работает с файлами. Чего мне делать в моем случае? сохранять временный файл с картинкой или другие приемы имеются?

   
 
 автор: cheops   (12.07.2005 в 01:34)   письмо автору
 
   для: Byte   (12.07.2005 в 01:30)
 

Способ вывода изображений из базы без временных файлов описывается в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=5173

   
 
 автор: Byte   (12.07.2005 в 01:41)   письмо автору
 
   для: cheops   (12.07.2005 в 01:34)
 

Ну верно. Только мы ведь ничего с изображением там не делаем. просто выводим его с помощью echo. а мне его еще и уменьшить надо предварительно, т.к. в базе храниться довольно крупный размер картинок. вот тут у меня и возникает проблема. у меня в переменной храниться бинарная картинка, а все функции тут применяемые для масштабирования работают с указателями. т.е. файлик открыли, ссылку на картинку получили и айда его в функции вставлять. так как мне в таком случае быть?

   
 
 автор: glsv (Дизайнер)   (14.07.2005 в 11:42)   письмо автору
 
   для: Byte   (12.07.2005 в 01:41)
 

>т.е. файлик открыли, ссылку на картинку получили и айда его в функции вставлять. так как мне в таком случае быть?
А сохраняйте изображения из базы во временные файлы и работайте далее с кодом, приведенным в той теме.

   
 
 автор: Mootch   (20.11.2005 в 22:10)   письмо автору
 
   для: glsv (Дизайнер)   (09.07.2005 в 09:04)
 

скрипт не работает с BMP. Как быть?

   
 
 автор: glsv (Дизайнер)   (20.11.2005 в 23:52)   письмо автору
 
   для: Mootch   (20.11.2005 в 22:10)
 

Никак. Библиотека GDLib не работает с bmp.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования