Вывод изображений средствами PHP
Возникла надобность вывести изображения в нечто похожее на галерею исходя из чего нашел и подстроил следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
$archive = archive/username/; // проще говоря, переменная берется из бд и она рабочая, проверял через Echo $widthdef=750; //ширина блока изображений $heightdef=120; //максимальная высота одной строки $margin=2; //отступы между картинками $uploadsdir= $archive.'photo_al/'; //папка, в которой лежат изображения //$img[от 1 до N] - массив картинок //$imagescount=N соответственно, количество картинок echo ''; $first=1; while($first$imagescount){ $images=$first-1; $hightes=$heightdef+1; while($hightes > $heightdef && $images$imagescount) { $images++; $width=$widthdef-($images-$first+1)*($margin*2); //ширина,с учетом отсупов list($w[$images], $h[$images]) = getimagesize($uploadsdir.$img[$images]); //запрашиваем ширину и высоту изображения по мере необходимости $delim=$width*$h[$first]; $delit=$w[$first]; for($j=($first+1);$j$images;$j++) { $delit=$delit+$w[$j]*($h[$first]/$h[$j]); } $hightes=floor($delim/$delit);//высота строки if($hightes$heightdef) { for($iy=$first;$iy$images;$iy++) { $ht=$hightes.'px'; echo ''; //выводим картинку } $first=$images+1; } else { if($images==$imagescount) { //вывод картинок, если блок не получается полностью заполненным for($y=$first;$y$images;$y++) { echo ''; } $first=$images+1; //указываем, с какой картинки считать } } } } echo '';?>
Но в итоге не происходит ничего и я не могу понять в чём проблема?
Через echo выводит спокойно путь к нужной директории.
Где-то ошибка в формуле?
Вывод всех картинок из папки на PHP
Если Вы делали сайт-визитку, то перед Вами могла встать задача по выводу какого-нибудь портфолио, каких-то работ, другими словами, изображений. Предположим, Admin-панели у сайта нет, а вот новые работы заказчик должен добавлять максимально легко, не залезая в исходный код. Вот в таких случаях Вам очень поможет данная статья, в которой мы реализуем вывод всех картинок из папки на PHP.
Привожу сразу весь PHP-код:
$dir = ‘images/’; // Папка с изображениями
$cols = 3; // Количество столбцов в будущей таблице с картинками
$files = scandir($dir); // Берём всё содержимое директории
echo «
«; // Начинаем столбец $path = $dir.$files[$i]; // Получаем путь к картинке echo «»; // Делаем ссылку на картинку echo ««; // Вывод превью картинки echo «»; // Закрываем ссылку echo « |
«; // Закрываем таблицу
?>
Разумеется, здесь идёт смесь представления и реализации, что, конечно, нехорошо, но данный скрипт Вы должны будете подстроить под свой движок. Возможно, у Вас и таблиц не будет. В остальном, думаю, проблем с понимаем, как вывести на сайт изображения из папки на PHP, возникнуть не должно.
Теперь для того, чтобы добавить очередное изображение на сайт, достаточно просто скопировать необходимую картинку в папку «images«. Вот таким простым способом реализуется задача, которая, на первый взгляд, неразрешима без вмешательства в исходный код, базу данных, либо создания Admin-панели.
Создано 19.10.2012 08:43:41
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
- Кнопка:
Она выглядит вот так: - Текстовая ссылка:
Она выглядит вот так: Как создать свой сайт - BB-код ссылки для форумов (например, можете поставить её в подписи):
Отображаем все картинки из директории при помощи PHP
Случилось так, что подготавливая материалы для одного из будущих постов о забавной старой MS-DOS игре, мне понадобилось сделать скриншот около 500 маленьких иконок-спрайтов, собранных все вместе рядом и в заданном количестве колонок. Искать и устанавливать специальный софт чтобы генерировать коллажи картинок было не охота, задача очень проста и решилась в два десятка строк на PHP. Выводим все найденные картинки из директории в виде таблички и задаем фон — все просто, как в 1м классе.
Подготовка
Итак, список действий для данной задачки:
- открыть директорию;
- отсеять все файлы что не являются картинками по расширению png, jpg, gif;
- вывести каждый рисунок в табличке с заданным количеством колонок и цветом фона.
Для тестирования и разработки на PHP подобных скриптов всегда удобно держать под рукой сборку с локальным веб-сервером Apache+PHP. В принципе подойдет любой локальный веб-сервер, я же использую OpenServer — он бесплатен, прост в установке и настройке.
Вот самое простое решение на PHP, написанное за несколько минут:
// show images in grid $columns = 15; $background = '#DBEAF9'; $images_dir = 'images/'; $count = 1; echo ''; if(is_dir($images_dir)) < if ($h = opendir($images_dir)) < while (($file = readdir($h)) !== false) < if(preg_match("#\.(jpg|gif|png)$#i", $file)) < echo ' '; $count++; if( ($count%$columns)==0 ) echo ' '; > > closedir($h); > > echo '
';
Все картинки из директории, что размещена там же где и файл-скрипт, будут выведены в виде таблици с количеством колонок равным 15. Цвет фона таблици — #DBEAF9 .
Результат
Вот что получается в результате генерации HTML кода скриптом:
Заключение
Вот такое простое решение простой задачи на PHP. При сборе и обработке информации, картинок и прочих ресурсов уже очень часто сталкиваюсь с подобными задачами, для которых не обязательно качать у устанавливать массу разного софта, достаточно вспомнить что под рукой есть простой и удобный инструмент — скриптовый язык программирования PHP.
Вообще любой язык программирования при умелом обращении, в целях автоматизации, может сэкономить массу времени при решении разных рутинных задач. Представьте только себе, к примеру, если бы эти 500 картинок взять и вручную по сращивать в Фотошопе — даже представить страшно сколько на это уйдет времени.
Как вывести массив изображений?
Я пытаюсь перечислить (также изменить размер) фотографии в следующем коде. Поэтому я хочу вывести все изображения с идентификатором «х».
Проблема в том, что у меня есть заголовок, который я включил в документ, поэтому я не могу использовать header(‘Content-type: image/jpeg’); вывести массив изображений, которые я хочу показать. Но если я достану его, он просто показывает группу случайных символов, которые, как я знаю, представляют собой фотографию в виде строки. Я не уверен, как заставить это работать. Я планирую иметь каждую фотографию в отдельном разделе.
prepare($query); if ($getphotos->execute())< while ($array = $getphotos->fetch(PDO::FETCH_ASSOC)) < $image = imagecreatefromjpeg('userphotos/'.$array['photoname'].''); list($image_width, $image_height, $type, $attr) = getimagesize('userphotos/'.$array['photoname'].''); $new_size = ($image_width + $image_height)/($image_width*($image_height/100)); $new_width = $image_width * $new_size; $new_height = $image_height * $new_size; $new_image = imagecreatetruecolor($new_width, $new_height); imagecopyresized($new_image, $image, 0, 0, 0, 0, $new_width, $new_height, $image_width, $image_height); $imagearray = imagejpeg($new_image, null); header('Content-type: image/jpeg'); echo $imagearray; >> else < die('Query Error'); >?>
Я могу сделать что-то подобное
while ($array = $getphotos->fetch(PDO::FETCH_ASSOC))< echo ''; >
Но тогда это означает, что я буду выполнять запрос дважды, что, вероятно, не очень хорошая идея? Это единственный способ?
2 ответа
Протокол HTTP обрабатывает один ответ на один вопрос. Работа HTML заключается в том, что он описывает структуру и содержимое в одном HTML-документе и позволяет загружать вторичные ресурсы по ссылке. Правильный способ сделать это — создать img теги в вашем HTML к изображениям, которые должны быть показаны, также позволяющие вам стилизовать их и т. д. В ссылочных URL-адресах вы можете затем передать параметр для конкретного изображения.
while($row = $myQuery->nextRow()) echo 'getName()).'">';
Поскольку изображения по определению являются автономными файлами, вы никоим образом не можете отправлять их в том же запросе, что и ссылочный документ.