Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] Миниатюры картинок с помощью пхп (http://forum.oszone.net/showthread.php?t=90272)

Hitsi 14-09-2007 13:27 643449

Миниатюры картинок с помощью пхп
 
Пользователь загружает на сайт картинки, которые в последующем выводятся на экран.
Картинки выводятся не в полный свой размер (чтобы уместолось несколько штук на странице). Как можно их переделать и вывести не делая при загрузке отдельной папочки с миниатюрами и не через жесткое указание высоты-ширины в теге img?
Есть варинат с временными фаилами.... но чтот их слишком много получается %)

XCodeR 14-09-2007 17:49 643608

Hitsi, посмотрите этот класс и метод ouput()

Hitsi 15-09-2007 20:02 644080

Посмотрел, спасибо.... буду юзать. Вот только одна проблемка.
Сайт использует смарти, т.е. я в шаблон передаю переменную, а оутпут непосредственно выводит картинку. Как мне реализовать вывод этой картинки, т.е. что я должен передать в шаблон?
Сэйв сохраняет измененую на жестком диске.....

XCodeR 15-09-2007 21:25 644117

на том же сайте имеется пример вывода картинки:

HTML код:

include('SimpleImage.php');
      $image = new SimpleImage();
      $image->load($_FILES['uploaded_image']['tmp_name']);
      $image->resizeToWidth(150);
      $image->output();

Цитата:

Цитата Hitsi
Сайт использует смарти »

Поправьте немного исходный код вывода картинки.

Hitsi 16-09-2007 16:11 644393

обшибся........

Prisoner 19-09-2007 19:07 646234

Топик можно пометить решенным?

Hitsi 21-09-2007 19:08 647367

Нет.. вопрос остался открытым..... решен частично... спасибо за класс %)

Мне интересно как я должен изменить код чтобы передать "картинку" в шаблон. При
PHP код:

$image->output() 

он моментально выводит эту картинку прямо во время выполнения кода.. т.е. картинка загружается даже еще до заголовков в самом начале страницы (даже не картинка а иероглифы).
Картинок много, сейчас в шаблон передается многомерный массив. Грубо говоря одному ряду массива соответсвует одна картинка.. там описан путь к ней, id автора, новые размеры.... А уже в шаблоне эта картинка выводится с жестко указанными размерами в теге img, которые просчитывались функцией (чтобы картинка не превышала определенных размеров, но при этом имела тоже самое соотношение высоты и ширины).
Т.е. я по сути имею туже самую картинку с темже "обьемом", только маленькую, что в общем-то неправильно и сильно загружает страницу.... Вот я и задал вопрос можно ли не используя дополнительной папки с миниатюрами (потомучто картинка выводится в нескольких местах с разными "максимально разрешенными" размерами... и отдельных миниатюр будет тоже много на каждую картинку) и без использования временных фаилов сделать то что хочется %)

Prisoner 22-09-2007 03:33 647512

Почему нет? Создайте скрипт-генератор тумб (миниатюр) который принимал бы в качеcтве параметра (ов) через GET габариты для тумбы и имя оригинала (источника для тумбы). В шаблоне вызывайте этот скрипт как банальный тег:
Код:

<img src="/thumb.php?width={$someWidth}&height={$someHeight}&image={$someImage}" width="{$someWidth}" height="{$someHeight}" alt="{$someAlt}">
Если таких тегов надо много, то передавайте в представление массив таких значений и генирируйте теги циклом.
Сам скрипт-генератор будет выглядеть примерно как указал XCodeR в первом своем посте. Если будут опять чудеса в виде
Цитата:

Цитата Hitsi
даже не картинка а иероглифы »

, то поглядите правильные ли заголовки отправляет класс при попытке output в броузер. Должны быть признаки картинки. Подробнее здесь при поиске по ключевому слову header.

VeshchiyOleg 29-09-2007 21:44 651656

можно использовать библиотеку gd (она не установлена по умолчанию)
например, где нужны мелкие картинки писать
HTML код:

<img src="thumb.php?src=image.gif">
уменьшитель картинки
PHP код:

# thumb.php обработчик для gif, jpeg, png

$filename 'path/to/images/dir/'.$src# дописываем путь к каталогу с картинками
if ($size getimagesize($filename)) {
    switch (
$size[2]) { # создаем загруженную картинку для обработки
        
case IMAGETYPE_GIF:
            
$img_src imagecreatefromgif($filename);
            break;
        case 
IMAGETYPE_JPEG:
            
$img_src imagecreatefromjpeg($filename);
            break;
        case 
IMAGETYPE_PNG:
            
$img_src imagecreatefrompng($filename);
            break;
    }
    
$width_limit 100# лимит ширины
    
$height_limit 100# лимит высоты
    
$k max($size[0] / $width_limit$size[1] / $height_limit); # коэффициент уменьшения картинки
    
if ($k 1) { # если надо, уменьшаем
        
$width ceil($size[0] / $k);
        
$height ceil($size[1] / $k);
        
$img_dst imagecreatetruecolor($width$height); # создаем маленькую картинку
        
imageinterlace($img_dst1); # это для ускорения загрузки - подробней - читай мануал
        
imagecopyresampled($img_dst$img_src0000$width$height$size[0], $size[1]);
    } else { 
# если нет - берем что есть
        
$img_dst $img_src;
    }
    switch (
$size[2]) {
        case 
IMAGETYPE_GIF:
# вывод
            
header('Content-type: image/gif');
            
imagegif($img_dst);
# или сохранение
#            imagegif($img_dst, 'path/to/save/'.$src);
# остальные по аналогии
            
break;
        case 
IMAGETYPE_PNG:
            
header('Content-type: image/png');
            
imagepng($img_dst);
            break;
        case 
IMAGETYPE_JPEG:
            
header('Content-type: image/jpeg');
            
imagejpeg($img_dst);
            break;
    }
    
imagedestroy($img_dst); # подчищаем за собой
    
imagedestroy($img_src);



Hitsi 09-10-2007 01:06 656711

В предложеном классе ГД и используется....
тему можно закрывать, всем спасибо %)

Проблема была в моем незнании о работе скриптов под тегом img %)


Время: 21:21.

Время: 21:21.
© OSzone.net 2001-