- Подробности
-
Категория: PHP. Графика
Случайный вывод картинки
Главная » Уроки PHP » Случайный вывод картинки
PHP урок № 160
Случайная фотография из альбома на монитор.
Для чего это может пригодится?!
К примеру на главной странице сайта, в рекламных целях, могут быть представлены набор баннеров на одну тему рекламной компании. Можно в целях украшательства и разнообразия менять картинку на странице. Думать вам, а я представлю функцию и объясню как она работает.
В качестве альбома подразумевается папка с хранящимися там фотографиями или картинками.
Листинг № 1 — Случайный вывод картинки. Файл index.php.
<?php
function rand_foto($patch = ".")
{
//$patch — путь к каталогу.
// Пример: (http:⁄⁄lphp.ru/images/Avatar1/)
// или относительный путь: (images/Avatar1/)
// По умолчанию функция будет обрабатывать текущий каталог
//Открываем каталог
if(!$dir = opendir($patch)) return "Это не директория";
// Читаем содержимое каталога
while(($t = readdir($dir)) !== false)
{
$ext = substr(strrchr($t,'.'), 1);
if(is_file($t) && ($ext == "gif") ($ext == "jpg") ($ext == "png"))
{
$filename[] = $patch."/".$t;
}
}
// Закрываем каталог
closedir($dir);
// Получаем случайный индекс из массива
$index = rand(0, count($filename) — 1);
// Выводим случайный файл
$foto = "<img src="/.$filename[$index].">";
return $foto; // функция возвращает случайное фото
}
// Вызываем функцию
echo rand_foto();
?>
В листинге №1 показан полностью код файла с именем index.php Просто скопируйте код и сохраните его в папке с картинками под именем index.php, тогда вам не надо будет указывать путь до файла, достаточно прописать в адресной строке папку где хранятся фотографии для вывода на монитор. Примерно так: http://lphp.ru/lessons/rand_foto/.
ВАРИАНТ 2
Здесь представлена слегка изменённая функция, в которой добавлен ещё один аргумент, для управления свойством width тега img, который устанавливает ширину картинки. При этом картинка будет изменять свой размер пропорционально, т.е. высота будет автоматически подогнана под нормальный размер для этой ширины. Хочу отметить, что картинки легче и лучше обрабатывать до загрузки на сервер. Менять их размер, яркость, резкость, контраст и цветовую гамму.
К тому же это предположительно, будет специально выделенное место для показа картинок, а следовательно они должны быть одинаковых пропорций, чтоб при смене одного изображения на другое, не происходил видимый перепад ширины или высоты одной картинки от другой, что повлияет на отображение всей web-страницы. Это просто будет не красиво выглядеть.
Но как бы там не было, возможно есть и другие причины для изменения размеров картинки в самой функции, которые мне не известны. В связи с этим и появился второй вариант, более гибкий. В котором по умолчанию назначена ширина 100px. Вы можете не указывать второй аргумент функции (т.е. ширину), тогда по умолчанию все картинки будут выведены 100px шириной.
Листинг № 2 — Вывод случайной картинки, с заданной шириной.
<?php
function rand_foto($patch = ".", $w ="100")
{
//$patch — путь к каталогу.
// Пример: (http:??lphp.ru/images/Avatar1/)
// или относительный путь: (images/Avatar1/)
// По умолчанию функция будет обрабатывать текущий каталог
//Открываем каталог
if(!$dir = opendir($patch)) return "Это не директория";
// Читаем содержимое каталога
while(($t = readdir($dir)) !== false)
{
$ext = substr(strrchr($t,'.'), 1);
if(is_file($t) && ($ext == "gif") ($ext == "jpg") ($ext == "png"))
{
$filename[] = $patch."/".$t;
}
}
// Закрываем каталог
closedir($dir);
// Получаем случайный индекс из массива
$index = rand(0, count($filename) — 1);
// Выводим случайный файл
$foto = '<img src="'.$filename[$index].'" width="'.$w.'">';
return $foto; // функция возвращает случайное фото
}
// Вызываем функцию
echo rand_foto("../img",300);
?>