Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблеиы с выводом картинок в браузер (фотогалерея)
 
 автор: EvgenLog   (25.09.2005 в 02:34)   письмо автору
 
 

Здравствуйте! только не говорите, чтобы я пользовался поиском, потому, что я уже итак им часа 2 пользовался...
Вобщем проблема вот в чём:
Насколько я понимаю, вот этот скрипт должен выводить все картинки, которые есть в директории:

<?
$config_path_image_upload 
"./Pictures/";

$img_dir opendir($config_path_image_upload);

while (
$file readdir($img_dir))
{
$images_in_dir[] = $file;
}
foreach (
$images_in_dir as $file) {

echo
"<img src='$config_path_image_upload$file' border=0 width=100 WIDTH=100>";
}
?> 

...
А он почему-то выводит только картинки с разрешением 1024x768...
В чём дело-то???
Кстате, я все тесты проыожу на Windows, используя Деневер или как его там... Может из-зи этого?
Спасибо...

   
 
 автор: glsv (Дизайнер)   (25.09.2005 в 06:59)   письмо автору
 
   для: EvgenLog   (25.09.2005 в 02:34)
 

Это весь скрипт? Здесь нет ограничений на вывод файлов определенного разрешения.
А может быть у вас в директории все файлы размером 1024x768?
Если нет, то какого они размера и какой тип файлов (jpg, gif, png)

   
 
 автор: EvgenLog   (25.09.2005 в 11:15)   письмо автору
 
   для: glsv (Дизайнер)   (25.09.2005 в 06:59)
 

Файлы лежат 1024х768 и 800х600. Все jpg... Но нужно чтобы и gif'ы выводил и с любым разрешением... Которые 1024х768 показывает в размере 100х100, а 800х600 - квадратик с красным крестиком...
Кстате, скачивал Wallist у вас... Там то же самое 1024х768 выводит, а 800х600 нет...

   
 
 автор: cheops   (25.09.2005 в 13:30)   письмо автору
 
   для: EvgenLog   (25.09.2005 в 11:15)
 

А как файлы называются? Если скачать изображения обратно на локальную машину - они нормально отображаются? Приводит ли к чему изменение строки
<?php
echo"<img src='$config_path_image_upload$file' border=0 width=100 WIDTH=100>";
?>

на
<?php
echo "<img src='".$config_path_image_upload.$file."' border=0 width=100 WIDTH=100>";
?>

   
 
 автор: EvgenLog   (25.09.2005 в 17:57)   письмо автору
 
   для: cheops   (25.09.2005 в 13:30)
 

Файлы итак лежат на локальной машине... Изменение ни к чему не приводит...
Я понял! Он не выводит файлы с русскими именами... Почему? Как это устранить если можно?
Вот полный скрипт... Списал с одной из тем...

<?
$config_path_image_upload 
"./Pictures/";

$allowed_extensions = array("gif""jpg""png""bmp""jpe""jpeg");

// ********************************************************************************
// Show Images List
// ********************************************************************************
$img_dir opendir($config_path_image_upload);

while (
$file readdir($img_dir))
{
$images_in_dir[] = $file;
}
natcasesort($images_in_dir);
reset($images_in_dir);
foreach (
$images_in_dir as $file) {

$img_name_arr explode(".",$file);
$img_type end($img_name_arr);

if ( (
in_array($img_type$allowed_extensions) or
in_array(strtolower($img_type), $allowed_extensions)) and
$file != ".." and $file != "." and is_file($config_path_image_upload."/".$file))

{

echo 
"<img src='".$config_path_image_upload.$file."' border=0 width=100 WIDTH=100>"
}
}
?>

   
 
 автор: DDK   (25.09.2005 в 19:04)   письмо автору
 
   для: EvgenLog   (25.09.2005 в 17:57)
 

Англоязычный Апач никогда не умел и не научится работать с русскими именами файлов. И это даже к лучшему, ибо наводит эстетический порядок. Выходы - при аплоаде картинок на сервер либо изначально не задавать им русские имена, либо скриптом транслитить имена.

   
 
 автор: EvgenLog   (25.09.2005 в 21:41)   письмо автору
 
   для: DDK   (25.09.2005 в 19:04)
 

Ну всё... С одним разобрался... Возникают, как обычно дальнейшие проблемы...
Вот полный код (пока) скрипта...

<?
$folder 
"./Pictures";//Каталог в котором находятся галереи
$p $folder;
$main_image_dir "./Pictures/";

$allowed_image_extensions = array("gif""jpg""png""bmp""jpe""jpeg");

$open_main_img_dir opendir($main_image_dir);

while (
$file readdir($open_main_img_dir))
    {
        
$images_in_dir[] = $file;
    }
natcasesort($images_in_dir);
reset($images_in_dir);

foreach (
$images_in_dir as $file
    {
        
$img_name_arr explode(".",$file);
        
$img_type end($img_name_arr);

        if ( (
in_array($img_type$allowed_image_extensions) or
        
in_array(strtolower($img_type), $allowed_image_extensions)) and
        
$file != ".." and $file != "." and                         

        
is_file($main_image_dir."/".$file))
    {

        
$size_img getimagesize($p."/".$file);
        
$name basename ($file,".jpg");
        echo 
"<img src='".$main_image_dir.$file."'                     

        border=2 width=200 WIDTH=100                             

        alt=
$name><br>$name<br>$size_img<br>"
    }
    }
?>

Он выводит и катинки и имена этих картинок, а вот с размерами почему-то проблема... пишет под каждой картинкой "Array"... Что тут не так? Спасибо...

   
 
 автор: cheops   (25.09.2005 в 22:01)   письмо автору
 
   для: EvgenLog   (25.09.2005 в 21:41)
 

Это связано с тем, что функция getimagesize() возвращает массив http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=5325. Нулевой элемент - ширина в пикселах, а первый - высота, вам какой размер нужен? Может более подойдёт функция filesize, которая возвращает размер файла в байтах?

   
 
 автор: EvgenLog   (25.09.2005 в 22:36)   письмо автору
 
   для: cheops   (25.09.2005 в 22:01)
 

Мне как рз надо разрешение... Разобрался уже... А можете объяснить каким образом выводить изображения на страницу... Например 3 по горизонтали и 2 по вертикали?
В файлах Wallist всё досточно замудрёно написано... Для меня... По крайней мере...
Спаибо...

   
 
 автор: EvgenLog   (26.09.2005 в 00:17)   письмо автору
 
   для: EvgenLog   (25.09.2005 в 22:36)
 

Что-то я намдрил со скриптом... Думал он будет выводить все картинки из папки с разрешением 100х100, а он выводит подряд одну и ту же... Причём последнюю в папке...??? Что тут не так?

<?
$main_img_folder 
"./Pictures/";
$open_main_img_folder opendir($main_img_folder);
$image_extensions = array("gif""jpg""png""bmp""jpe""jpeg");

function 
resizeimg($filename$w$h

    
// определим коэффициент сжатия изображения, которое будем генерить 
    
$ratio $w/$h
    
// создадим пустое изображение по заданным размерам 
    
$dest_img imagecreatetruecolor($w$h);     
    
// зальём его белым цветом 
    
imagefill($dest_img000xFFFFFF);   
    
// получим размеры исходного изображения 
    
$size_img getimagesize($filename); 
    
// получим коэффициент сжатия исходного изображения 
    
$src_ratio=$size_img[0]/$size_img[1]; 

    
// здесь вычисляем размеры, чтобы при масштабировании сохранились 
    // 1. Пропорции исходного изображения 
    // 2. Исходное изображение полностью помещалось на маленькой копии 
    // (не обрезалось) 
    
if ($src_ratio>$ratio
    { 
        
$old_h=$size_img[1]; 
        
$size_img[1]=floor($size_img[0]/$ratio); 
        
$old_h=floor($old_h*$h/$size_img[1]); 
    } 
    else 
    { 
        
$old_w=$size_img[0]; 
        
$size_img[0]=floor($size_img[1]*$ratio);     
        
$old_w=floor($old_w*$w/$size_img[0]); 
    } 
     
    
// исходя из того какой тип имеет изображение 
    // выбираем функцию создания 
    
switch ($size_img['mime']) 
    { 
        
// если тип файла JPEG 
        
case 'image/jpeg'
            
// создаем jpeg из файла 
            
$src_img imagecreatefromjpeg($filename);             
            
$ext="jpg";             
            break;         
        
// если тип файла GIF             
        
case 'image/gif':     
            
// создаем gif из файла         
            
$src_img imagecreatefromgif($filename);             
            
$ext="gif";             
            break;         
    } 
    
// масштабируем изображение    функцией imagecopyresampled() 
    // $dest_img - уменьшенная копия 
    // $src_img - исходной изображение 
    // $w - ширина уменьшенной копии 
    // $h - высота уменьшенной копии     
    // $size_img[0] - ширина исходного изображения 
    // $size_img[1] - высота исходного изображения 
    
imagecopyresampled($dest_img$src_img0000$w$h$size_img[0], 

$size_img[1]);         
     
    
// в зависимости от типа файла выбирвем функцию сохранения в файл 
    
switch ($size_img['mime']) 
    { 
        case 
'image/jpeg'
            
// сохраняем в файл small.jpg 
            
imagejpeg($dest_img"small.$ext");         
            break; 
        case 
'image/gif':     
            
// сохраняем в файл small.gif         
            
imagegif($dest_img"small.$ext");         
            break;         
    }         

    
// чистим память от созданных изображений 
    
imagedestroy($dest_img); 
    
imagedestroy($src_img);         



while(
$images readdir($open_main_img_folder))
    {
        
$img_in_dir[] = $images;
    }
foreach(
$img_in_dir as $images)
    {
        
$img_name_array explode("."$images);
        
$img_type end($img_name_array);
        
            if(
is_file($main_img_folder.$images) &&                 

    
in_array($img_type$image_extensions))
                {
                    
$img_size getimagesize($main_img_folder."/".
                    
$images);
                    
$img_name basename($images);

    
// Создадим уменьшенную копию изображения 
     
    // имя файла с которым будем работать 
    // файл должен находиться в том же месте, что и этот скрипт 
    
$source=$main_img_folder.$images
    
// определим размеры уменьшенного изображения 
    
$d_w=133
    
$d_h=100
    
// вызываем функцию изменения размера 

 

    
resizeimg($source133100); 
     
    
// выводим картинку на экран 
     
    
echo "<img src='small.jpg'>";

                    }
    }
?>

   
 
 автор: glsv (Дизайнер)   (26.09.2005 в 06:25)   письмо автору
 
   для: EvgenLog   (26.09.2005 в 00:17)
 

Вы в цикле проходите по всем файлам и создаете уменьшенную копию, с одним и тем же именем - small для всех файлов. Т.е. постоянно перезаписываете результаты работы скрипта. А когда страница отображается, то, естественно, отображается только последний смасштабированный файл.

Вам не нужно сохранять смаштабированную картинку в файл. Можно масштабировать "на лету" без сохранения результатов. Посмотрите код ниже.


<? 
$main_img_folder 
"../site/images2/"
$open_main_img_folder opendir($main_img_folder); 
$image_extensions = array("jpg""png""bmp""jpe""jpeg"); 

while(
$images readdir($open_main_img_folder)) 

   
$img_name_array explode("."$images); 
   
$img_type end($img_name_array); 
         
   if(
is_file($main_img_folder.$images) && in_array($img_type$image_extensions)) 
   { 
     
$img_size getimagesize($main_img_folder."/".$images); 
     
$img_name basename($images); 

     
$source=$main_img_folder.$images

     
// выводим картинку на экран 
     
echo "<img src='img.php?file=$source' border='0'  alt=''>"
   }
}   
?>


Файл img.php, осуществляющий масштабирование должен находится рядом.

<? 
   
// Здесь можно и нужно добавить код, проверяющий 
   // содержимое переменной $_GET["file"] 
   // Вдруг вам хакер или просто любопытствующий туда 
   // что-нибудь не то передаст 
  
$filename $_GET["file"]; 
  
// Вызываем функцию масштабирования 
  
resizeimg($filename100,100); 

  
// Функция масштабирования 
  
function resizeimg($filename$w$h
  { 
    
// определим коэффициент сжатия изображения, которое будем генерить 
    
$ratio $w/$h
    
// получим размеры исходного изображения 
    
$size_img getimagesize($filename); 
    
// Если размеры меньше, то масштабирования не нужно 
    
if (($size_img[0]<$w) && ($size_img[1]<$h)) return true
    
// получим коэффициент сжатия исходного изображения 
    
$src_ratio=$size_img[0]/$size_img[1]; 

    
// Здесь вычисляем размеры уменьшенной копии, 
    // чтобы при масштабировании сохранились 
    // пропорции исходного изображения 
    
if ($ratio<$src_ratio
    { 
      
$h $w/$src_ratio
    } 
    else 
    { 
      
$w $h*$src_ratio
    } 
    
// создадим пустое изображение по заданным размерам 
    
$dest_img imagecreatetruecolor($w$h);     
    
$white imagecolorallocate($dest_img255255255);          
      
    if (
$size_img[2]==2)  $src_img imagecreatefromjpeg($filename);                         
    else if (
$size_img[2]==1$src_img imagecreatefromgif($filename);                         
    else if (
$size_img[2]==3$src_img imagecreatefrompng($filename); 

    
// масштабируем изображение     функцией imagecopyresampled() 
    // $dest_img - уменьшенная копия 
    // $src_img - исходной изображение 
    // $w - ширина уменьшенной копии 
    // $h - высота уменьшенной копии           
    // $size_img[0] - ширина исходного изображения 
    // $size_img[1] - высота исходного изображения 
    
imagecopyresampled($dest_img$src_img0000$w$h$size_img[0], $size_img[1]);                   

    
// Выводим уменьшенную копию в поток вывода 
    
if ($size_img[2]==2)  header('Content-type: image/jpg');                         
    else if (
$size_img[2]==1header('Content-type: image/gif');                         
    else if (
$size_img[2]==3header('Content-type: image/png'); 
    
// Выводим уменьшенную копию в поток вывода 
    
if ($size_img[2]==2)  imagejpeg($dest_img);                         
    else if (
$size_img[2]==1imagegif($dest_img);                         
    else if (
$size_img[2]==3imagepng($dest_img); 

    
// чистим память от созданных изображений 
    
imagedestroy($dest_img); 
    
imagedestroy($src_img); 
    return 
true;            
  }     
?>

   
 
 автор: EvgenLog   (26.09.2005 в 21:40)   письмо автору
 
   для: glsv (Дизайнер)   (26.09.2005 в 06:25)
 

Спасибо огромное! Теперь разобрался... Я кстате пробовал так делать... Ну не совсем так, но что-то похожее... Что бы скрипт получал имена файлов все подряд... Но что-то не получалось... Теперь буду разбираться с постраничной навигацией... Кстате, я вроде бы ни в одной из тем не видел, как это в принципе работает.. Т.е сохраняются файлы в массив или ещё куда... И вообще как они по страницам распределяются... Там только скрипты и объяснения к операциям... Может просто просмотрел, но в любом случае, хотелось бы узнать.
И ещё... Пытаюсь вывести картинки в ряд... Но получается в столбик...

<?
echo "<table  border='0'>
                        <tr>
                         <td>
                        <img src='img.php?file=
$source' border='0' alt='$name'>
                         </td>
                        </tr>
                        <tr>
                         <td>
                        <center>
                        
$size_img[0]x$size_img[1]<br>$name
                        </center>
                         </td>
                        </tr>
                        </table>"
;
?>

Спаибо...

   
 
 автор: EvgenLog   (27.09.2005 в 20:07)   письмо автору
 
   для: EvgenLog   (26.09.2005 в 21:40)
 

Жду ответа... Или его не будет? Тогда где найти ответ на этот вопрос? Он есть на форуме?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования