Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Прорисовка картинки из памяти

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Помогите плз советом
Dgrad
Отправлено: 01 Октября, 2013 - 17:50:24
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Есть скрипт который содержит функцию (resize.php):
PHP:
скопировать код в буфер обмена
  1. //$filename содержит путь и имя файла
  2. function resize_foto ($filename){
  3.     $size_foto = getimagesize($filename);
  4.     $width_small_foto = 100; //ширина выводимой уменьшенной копии
  5.     $ratio = $size_foto[0]/$width_small_foto; //коэффициент уменьшения
  6.     $x = $size_foto[0]/$ratio; //ширина копии =100
  7.     $y = $size_foto[1]/$ratio; //высота копии
  8.     $rectangle = imagecreatetruecolor($x, $y);
  9.     $smallfoto = imagecreatefromjpeg($filename);
  10.     imagecopyresampled($rectangle,
  11.                        $smallfoto,
  12.                        0, 0,
  13.                        0, 0,
  14.                        $x, $y,
  15.                        $size_foto[0],
  16.                        $size_foto[1]);
  17.    
  18.    header("Content-type: image/jpeg");
  19.    return imagejpeg($rectangle, '', 100);
  20.    imagedestroy($rectangle);
  21.    }
  22.    resize_foto($filename);

и к примеру есть код html (view.php):
CODE (html):
скопировать код в буфер обмена
  1. <html>
  2. <body>
  3. <img src="resize.php"/>
  4. </body>
  5. </html>

Если объявить переменную $filename (например 'image/file.jpg') скрипт view.php спокойно выводит уменьшенную копию изображения без сохранения файла. Я столкнулся с проблемой поскольку не особо силен в тонкостях PHP. Проблема следующая:
В будущем в базе данных mysql в отдельной таблице будут содержаться данные о фото (все те же 'image/file.jpg') и выводится они будут по такому же принципу как и в скрипе view.php Подскажите пожалуйста как организовать такой вывод нескольких изображений. Пока в мысли пришло следующее но увы не работает:
PHP:
скопировать код в буфер обмена
  1. //получаем данные о фотках (image/filename1.jpg, image/filename2.jpg и т.д.)
  2. ........
  3. while($row = mysqli_fetch_assoc($result)){
  4.     echo '<img src="resize.php?filename='.$row['filename'].'"><br/>';
  5. }

или же может вызывать функцию с дополнительным параметром но тогда header генерирует ошибку.
Может как то можно через $_GET() передать данные из view.php в resize.php и выводить картинки в памяти не сохраняя их? А то в будущем планируется много фоток поэтому и хочу выводить их в уменьшенном варианте... Главное принцип дальше разберусь... Нужно чтоб переменная объявлялась в view.php а выводилась через resize.php

Заранее спасибо...
(Добавление)
С эти вопросом разобрался следующим образом. Если не создавать функцию resize а просто оставить скрипт в файле то именно таким методом все это и работает. Остался вопрос. можно ли каким то образом передавать функцию или вызывать ее в теге <img> или в значении src?

(Отредактировано автором: 01 Октября, 2013 - 17:52:50)

 
 Top
philin
Отправлено: 01 Октября, 2013 - 22:35:39
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Сент. 2013  


Помог: 0 раз(а)




Передавать функцию - в смысле в файле иметь несколько функций для внешнего обращения? Тогда нужен простой роутер на свичах
CODE (html):
скопировать код в буфер обмена
  1. <img src="resize.php?action=resize&filename=1.png">

PHP:
скопировать код в буфер обмена
  1.  
  2. switch ($_GET['action']){
  3. case:'resize'
  4.   resize($_GET['filename']);
  5.   break;
  6. case:'another'
  7.   do_another();
  8.   break;
  9. }
  10.  


Если же речь идет о вызове функции resize() из view.php, т.е., при создании страницы генерировать превью и отдавать в браузер уже все готовое, то поможет require_once('resize.php') и base64_encode(), но это не слишком удачный вариант (кодирование займет время да и объем данных возрастет).

Советую все же хранить превью картинок. Каждый раз при обращении генерировать - возможна большая нагрузка на ЦП даже при небольшом количестве обращений. Обработка графики весьма затратна.

P.S. return возвращает указанное значение и прекращает работу функции. imagejpeg() сам по себе выводит данные, а imagedestroy($rectangle) никогда не будет вызван из-за return строкой выше.

(Отредактировано автором: 01 Октября, 2013 - 22:39:53)

 
 Top
Dgrad
Отправлено: 02 Октября, 2013 - 18:14:59
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Спасибо за комментарий. Учту в дальнейшем. А можно поинтересоваться. Насколько сильно загрузит память вывод изображений через браузер без их сохранения. Например если на странице 10-12 "превьюшек" такого типа и не более??? Может при таком количестве загрузка незначительна???
 
 Top
Мелкий Супермодератор
Отправлено: 02 Октября, 2013 - 19:02:01
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Нагрузка заметна от одной превьюшки.
Несколько десятков - положат мелкий хостинг как нефиг делать.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Графика в PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB