|
|
|
| Пробовал вывести картинку случайным образом... Ничего не выходит... Наверняка понимаете, о чём я... Из папки в которой несколько сотен картинок нужно показать одну любую, выбранную случайным образом...
Пробовал вот так... Использовал скрипт, который выводит фразы случайным образом, только в качестве фраз использовал имена файлов... Получил такой скрипт...
<?php
$main_img_folder = "./$main_files_dir/Gallery/Interiors/";
$open_main_img_folder = opendir($main_img_folder);
$image_extensions = array("jpg", "png", "bmp", "jpe", "jpeg");
while($images = readdir($open_main_img_folder))
{
srand((double)microtime() * 1000000);
$img_name_array = explode(".", $images);
$img_type = end($img_name_array);
if(is_file($main_img_folder.$images) && in_array($img_type, $image_extensions))
{
$filename = "$main_img_folder/config.ini";
// Читаем содержимое файла $filename
$fd = fopen($filename, "r");
$bufer = fread($fd,filesize($filename));
fclose($fd);
// Разбиваем содержимое файла на подстроки
// разделителем которых выступают ,
// помещая их в массив $phrase
$rand_img = explode("\r\n",$bufer);
// Получаем случайный индекс массива $phrase
$index = rand(0,count($rand_img)-1);
// Вывод
$source=$main_img_folder.$rand_img[$index];
// выводим картинку на экран
$size_img = getimagesize($main_img_folder."/".$rand_img[$index]);
$name = basename ($images,".jpg");
echo "<table align='left' valign='top' border='0'>
<tr>
<td width='25'></td>
</tr>
</table>
<table align='left' valign='top' border='1'>
<tr>
<td align='center'>
Èíòåðüåðû
</td>
</tr>
<tr>
<td>
<img src='img.php?file=$source' border='0' alt='$name'>
</td>
</tr>
<tr>
<td>
<center>
<font color='#2954D1'><b>$size_img[0]x$size_img[1]</b><br>
<a href='$main_url/$main_files_dir/Gallery/Interiors/$name.jpg'><b>$name</b>
</font>
</center>
</td>
</tr>
</table>";
}
}
?>
|
Заменил переменные и пути... Вместо разделителя поставил "\r\n"... Построчно выводит...
В конце концов выводится не одна картинка, а все... Что не так? | |
|
|
|
|
|
|
|
для: EvgenLog
(13.10.2005 в 22:49)
| | Вы рандомайзер и вывод HTML-кода поставили в тело цикла. Соответственно он будет с каждым циклом дублироваться и с новой картинкой. Извиняюсь, переработать ваш код времени нет, но, надеюсь, вы поняли свою ошибку. | |
|
|
|
|
|
|
|
для: DDK
(13.10.2005 в 23:16)
| | Ага... Понял... Сейчас исправлю. Спасибо! | |
|
|
|
|
|
|
|
для: EvgenLog
(14.10.2005 в 08:05)
| | Переработал код след. образом...
<?php
$main_img_folder = "./$main_files_dir/Gallery/Interiors/";
$open_main_img_folder = opendir($main_img_folder);
$image_extensions = array("jpg", "png", "bmp", "jpe", "jpeg");
$filename = "$main_img_folder/config.ini";
// Читаем содержимое файла $filename
$fd = fopen($filename, "r");
$bufer = fread($fd,filesize($filename));
fclose($fd);
// Разбиваем содержимое файла на подстроки
// разделителем которых выступают ,
// помещая их в массив $phrase
$rand_img = explode("\r\n",$bufer);
// Получаем случайный индекс массива $phrase
$index = rand(0,count($rand_img)-1);
while($rand_img[$index]= readdir($open_main_img_folder))
{
$img_name_array = explode(".", $rand_img[$index]);
$img_type = end($img_name_array);
if(is_file($main_img_folder.$rand_img[$index]) && in_array($img_type, $image_extensions))
{
// Выводим фразу
$source=$main_img_folder.$rand_img[$index];
// выводим картинку на экран
$size_img = getimagesize($main_img_folder."/".$rand_img[$index]);
$name = basename($rand_img[$index],".jpg");
echo "<table align='left' valign='top' border='0'>
<tr>
<td width='25'></td>
</tr>
</table>
<table align='left' valign='top' border='1'>
<tr>
<td align='center'>
Интерьеры
</td>
</tr>
<tr>
<td>
<img src='img.php?file=$source' border='0' alt='$name'>
</td>
</tr>
<tr>
<td>
<center>
<font color='#2954D1'><b>$size_img[0]x$size_img[1]</b><br>
<a href='$main_url/$main_files_dir/Gallery/Interiors/$name.jpg'><b>$name</b>
</font>
</center>
</td>
</tr>
</table>";
}
}
?>
|
Выводит опять все фотки... В чём дело??? | |
|
|
|
|
|
|
|
для: EvgenLog
(14.10.2005 в 08:41)
| | Приведите пожалуйста пример файла, в котром это всё храниться.
Да, и сколько картинок необходимо выводить? Если одну, то цикл не нужен. | |
|
|
|
|
|
|
|
для: EvgenLog
(14.10.2005 в 08:41)
| | Вот в общем, написал скрипт. Он если надо вывести одну картнику:
<?
Error_Reporting(E_ALL & E_NOTICE); // убираем ошибки
$dir="photo/"; // путь к дирректории
$file_img="img.txt"; // файл с картинками, описаниями
$img=file($file_img); // записываем строку в массив
$img_count=count($img); // считаем кол-во элементов
$img_vivod=rand(0,$img_count-1); // выбираем случайную картинку
$razdelitel="|"; // это разделитель строки
$img_param=explode($razdelitel,$img[$img_vovod]); // разделяем строку, всё записываем в массив
/*
Ну а здесь ты уже сам сделаешь таблицу со своими рисунками. Там думаю уже сам додумаешься!
*/
print "Вот тут и будет таблица с картинками";
?>
|
Сам файл имеет конструкцию:
1.jpg|Первая фотка
2.jpg|Вторая фотка
3.jpg|Третья фотка
|
| |
|
|
|
|
|
|
|
для: Football
(14.10.2005 в 20:47)
| | Хм... А как тогда массив обойти? Мне ведь нужно ещё и масштабировать их налету... | |
|
|
|
|
|
|
|
для: EvgenLog
(14.10.2005 в 23:33)
| | Пример файла такой...
...
...
31.jpg
11.jpg
...
...
Выводить нужно одну случайныю картинку и масштабировать одновременно... Пробовал убрать цикл... Не работает... | |
|
|
|
|
|
|
|
для: EvgenLog
(14.10.2005 в 23:48)
| | Попробуй такой код. Правда он не масштабирует картинки:
<?
function Tree($directory)
{
global $pathes;
$dir = opendir($directory);
while($file = readdir($dir))
{
if(is_file($directory."/".$file) && preg_match("/gif|bmp|jpg|png|jpeg/i",strrchr($file, ".")))
$pathes[] = $directory."/".$file;
elseif(is_dir($directory."/".$file) && ($file!=".") && ($file!=".."))
Tree($directory."/".$file);
}
closedir($dir);
}
Tree("C:\Pictures");
echo $pathes[rand(0,count($pathes))];
?>
|
и если картинок очень много будет, то память неэкономно расходуется. | |
|
|
|
|
|
|
|
для: Евгений Петров
(15.10.2005 в 00:02)
| | Спасибо... Попробую, но сначала добъю этот код! У меня получилось убрать цикл - работате, но картинка то выводится, то не выводится... Он видимо, что-то не то ещё выводит, вот таким код стал...
<?php
$main_img_folder = "./$main_files_dir/Gallery/Interiors/";
$open_main_img_folder = opendir($main_img_folder);
$image_extensions = array("jpg", "png", "bmp", "jpe", "jpeg");
$filename = "$main_img_folder/config.ini";
// Читаем содержимое файла $filename
$fd = fopen($filename, "r");
$bufer = fread($fd,filesize($filename));
fclose($fd);
// Разбиваем содержимое файла на подстроки
// разделителем которых выступают ,
// помещая их в массив $phrase
$rand_img = explode("\r\n",$bufer);
// Получаем случайный индекс массива $phrase
$index = rand(0,count($rand_img)-1);
if(is_file($main_img_folder.$rand_img[$index]))
{
// Выводим фразу
$source=$main_img_folder.$rand_img[$index];
// выводим картинку на экран
$size_img = getimagesize($main_img_folder."/".$rand_img[$index]);
$name = basename($rand_img[$index],".jpg");
echo "<table align='left' valign='top' border='0'>
<tr>
<td width='25'></td>
</tr>
</table>
<table align='left' valign='top' border='1'>
<tr>
<td align='center'>
Интерьеры
</td>
</tr>
<tr>
<td>
<img src='img.php?file=$source' border='0' alt='$name'>
</td>
</tr>
<tr>
<td>
<center>
<font color='#2954D1'><b>$size_img[0]x$size_img[1]</b><br>
<a href='$main_url/$main_files_dir/Gallery/Interiors/$name.jpg'><b>$name</b>
</font>
</center>
</td>
</tr>
</table>";
}
?>
|
| |
|
|
|
|
|
|
|
для: EvgenLog
(15.10.2005 в 00:11)
| | Попробуйте так:
$pictures = array('11.jpg', '12.jpg'); ' и так далее, загоняйте в массив картинки
srand((float)microtime()*100000000);
shuffle($pictures);
for ($i=0; $i<1;$i++)
{ echo $pictures[$i]; }
|
| |
|
|
|
|
|
|
|
для: Boss
(15.10.2005 в 00:34)
| | загонять каждую картинку в массив? Их количество будет постоянно менятся, они будут загружаться пользователями...
Вот объясните мне кто-нибудь... Я изменил скрипт вот так...
<?
...
$img_name_array = explode(".", $rand_img[$index]);
$img_type = end($img_name_array);
if(is_file($main_img_folder.$rand_img[$index]) && in_array($img_type, $image_extensions)
&& $name = basename($rand_img[$index],".jpg"))
{
$source=$main_img_folder.$rand_img[$index];
// выводим картинку на экран
$size_img = getimagesize($main_img_folder."/".$rand_img[$index]);
...
?>
|
Теперь с вероятностью в 30% - 40% ничего не показывается...
Я прикрепил полный код скрипта, может кто посмотрит в чём там дело? | |
|
|
|
|
|
|
|
для: EvgenLog
(14.10.2005 в 23:33)
| | Что значит масштабировать картинку?
И зачем тебе массив обходить, если у тебя все данные файла в массив записываются? | |
|
|
|
|
|
|
|
для: Football
(15.10.2005 в 13:00)
| | А каждой картинке соответствует своя подпись? Если так - используйте код Football, иначе код Евгения Петрова. | |
|
|
|
|
 837 байт |
|
|
для: OZ_
(15.10.2005 в 13:11)
| | Короче напарился я с этим кодом, но написал всё таки свой и он великолепно работает, но пока только для одного формата "*.jpg".
Он прикреплён к сообщению, если кому интересно, то посмотрите, обсудите, укажите на недостатки... И т.д.... Всем спасибо за помощь!
P.S. Скрипт использует ещё один файл... Это как раз тот, что масштабирует картинки на лету... Но его я не стал прикреплять... | |
|
|
|
|
|
|
|
для: EvgenLog
(15.10.2005 в 13:16)
| | Так если выводить сразу несколько картинок, то зачем тогда случайный выбор. Конечно, если надо вывести две из пяти я понимаю, но я такое вообще нигде не встречал. Что касается вывода нескольких, то просто тандо добавить в самом начале скрипта перед радномом вот такой скрипт
$max:=2; // кол-во выводимых картинок
for ($i=0;$i<$max;$i++) {
// Тут будет идти сам код
}
|
| |
|
|
|
|
|
|
|
для: Football
(15.10.2005 в 16:25)
| | Не мне одну надо... Но всё равно спасибо! Вдруг пригодится... | |
|
|
|
|
|
|
|
для: Football
(15.10.2005 в 13:00)
| | 1) EvgenLog писал что ему надо вывести картинк и масштабировать её.
2) Где я там массив обхожу, скрипт рекурсивно обходит каталог и вложенные в него каталоги ищет графические файлы и заносит пути в массив, а потом из массива рандомом выбирается один файл. | |
|
|
|