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

Форум PHP

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

 

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

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

тема: Скрипт обоев
 
 автор: YAN   (10.07.2006 в 14:36)   письмо автору
 
 

Нужен скрипт.
Цель сайта - это обои дувушек.
Скрипт сканирует папку, проводит ссылки и режит демо картинки.
Все настраиваеться, все на русском.
Скажите название или пришлите в форум плиз!

   
 
 автор: elenaki   (10.07.2006 в 15:21)   письмо автору
 
   для: YAN   (10.07.2006 в 14:36)
 

это называется превьюшки. русского там ничего нет, ваше право - дописать. скрипт читает
папку и выводит все картинки , уменьшая их пропорционально до заданных размеров (90px)

<?
   
// Some configuration variables !
   
$maxWidth 90;
   
$maxHeight 90;
   
$maxCols 3;
   
$webDir "http://localhost/PHP/test/image_resize/";
   
$localDir "C:\\www\\home\\PHP\\test\\image_resize\\";

   
$AutorisedImageType = array ("jpg""jpeg""gif""png");
?>

<center>
<table border='1' cellspacing='5' cellpadding='5' style="border-collapse:collapse; border-style: dotted">
<tr>

   <?
   
// Open localDir
   
$dh opendir($localDir);
   while (
false !== ($filename readdir($dh))) {
       
$filesArray[] = $filename;
   }

   
// Display and resize
   
foreach ($filesArray as $images) {
   
       
$ext substr($imagesstrpos($images".")+1strlen($images));
       
       if( 
in_array($ext$AutorisedImageType) ) {

           list(
$width$height$type$attr) = @getimagesize$localDir.$images );

           
$xRatio $maxWidth $width
           
$yRatio $maxHeight $height
           
           if ( (
$width <= $maxWidth) && ($height <= $maxHeight) ) { 
             
$newWidth $width
             
$newHeight $height
           } 
           else if ((
$xRatio $height) < $maxHeight) { 
             
$newHeight ceil($xRatio $height); 
             
$newWidth $maxWidth
           } 
           else { 
             
$newWidth ceil($yRatio $width); 
             
$newHeight $maxHeight
           } 
           
           if(
$i == $maxCols) {
               echo 
"</tr><tr>";
               
$i 0;
           }
           echo 
"<td align='center' valign='middle' width='$maxWidth' height='$maxHeight'><img src='".$webDir.$images."' width='$newWidth' height='$newHeight'></td>";
           
$i++;
       }
   }
?>
</tr>
</table>
</center> 

   
 
 автор: tuder   (11.07.2006 в 10:16)   письмо автору
 
   для: YAN   (10.07.2006 в 14:36)
 

Вместо использования в указанном скрипте создания превьюшек, рекомендую воспользоваться функцией из темы http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=145&page=1. Ниже идёт подправленный предложенный скрипт, затем подправленная функция из вышеуказанной ссылки.

<?
   
// Some configuration variables !
   
include('imgresize.php'); // подключаем функцию
   
$maxWidth 90;
   
$maxHeight 90;
   
$maxCols 5;
   
$i 0;
   
$bigDir 'image/'// Каталог с изображениями
   
$smallDir "image/small/"// Каталог для помещения уменьшенных превьюшек

   
$AutorisedImageType = array ("jpg""jpeg""gif""png");
?>

<center>
<table border='1' cellspacing='5' cellpadding='5' style="border-collapse:collapse; border-style: dotted">
<tr>

   <?
   
// Open bigDir
   
$dh opendir($bigDir);
   while (
false !== ($filename readdir($dh))) {
       
$filesArray[] = $filename;
   }

   
// Display and resize
   
foreach ($filesArray as $images) {

       
$ext strtolower(substr($imagesstrpos($images".")+1strlen($images)));

       if( 
in_array($ext$AutorisedImageType) ) {
       
$image_name=strtolower($images);
       
$filename=$bigDir.$image_name;
       
resizeimg($bigDir.$images$smallDir.$image_name9090);
       if (
file_exists($smallDir.$images)) {
          
$images=$smallDir.$images;
       } else {
          
$images=$bigDir.$images;
       }
           if(
$i == $maxCols) {
               echo 
"</tr><tr>";
               
$i 0$i++;
           }
           echo 
"<td align='center' valign='middle'><a href='$filename' target=_blank><img src='".$images."'></a></td>";
       }
   }
   echo 
"</tr><tr>";
   
reset ($filesArray);
   foreach (
$filesArray as $images) {

      
$ext strtolower(substr($imagesstrpos($images".")+1strlen($images)));

      if( 
in_array($ext$AutorisedImageType) ) {

         
$image_name=strtolower($images);
         
$filename=$bigDir.$image_name;
         list(
$width$height$type$attr) = @getimagesize$filename );
         if(
$i == $maxCols) {
            echo 
"</tr><tr>";
            
$i 0$i++;
         }
           echo 
"<td align='center' valign='middle'><a href='$filename' target=_blank>$image_name</a><p>$width x $height</p></td>";
      }
   }
?>
</tr>
</table>
</center>


imgresize.php - немного оптимизирована работа и убрано выполнение функции при уже имеющейся превьюшке. Для ускорения работы вывода каталога изображений


<?
  
function resizeimg($filename$smallimage$w$h)
  {
    
// Имя файла с масштабируемым изображением $filename
    // Имя файла с уменьшенной копией $smallimage
    // Если уменьшенная копия уже есть - выходим из функции
    
if (file_exists($smallimage)) {
       return 
true;
    }
    
// определим коэффициент сжатия изображения, которое будем генерить
    
$ratio $w/$h;
    
// получим размеры исходного изображения
    
list($width$height$type$attr) = @getimagesize$filename );
    
// Если размеры меньше, то масштабирования не нужно
    
if (($width<$w) && ($height<$h)) return true;
    
// получим коэффициент сжатия исходного изображения
    
$src_ratio=$width/$height;

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

    
// масштабируем изображение     функцией imagecopyresampled()
    // $dest_img - уменьшенная копия
    // $src_img - исходной изображение
    // $w - ширина уменьшенной копии
    // $h - высота уменьшенной копии
    // $width - ширина исходного изображения
    // $height - высота исходного изображения
    
imagecopyresampled($dest_img$src_img0000$w$h$width$height);
    
// сохраняем уменьшенную копию в файл
    
if ($type==2)  imagejpeg($dest_img$smallimage);
    else if (
$type==1imagegif($dest_img$smallimage);
    else if (
$type==3imagepng($dest_img$smallimage);
    
// чистим память от созданных изображений
    
imagedestroy($dest_img);
    
imagedestroy($src_img);
    return 
true;
  }

// Вызов функции осуществляется следующим образом:

//  $bigimage = "0033.jpg";
//  $smallimage = "s_0033.jpg";
//  resizeimg($bigimage, $smallimage, 200, 200);
?>

   
 
 автор: pengo   (11.07.2006 в 11:48)   письмо автору
 
   для: tuder   (11.07.2006 в 10:16)
 

смотрите, сдесь же задаётся высота и ширина картинки. А если я хочу, как в Фотошопе, задавая размер одной из сторон, чтобы вторая менялась пропорционально, без искажений.

Спасибо!

   
 
 автор: tuder   (11.07.2006 в 13:32)   письмо автору
 
   для: pengo   (11.07.2006 в 11:48)
 

Почитайте указанную тему, где обсуждалась функция, так в частности, говорится:

В приведенном мною коде масштабирование, на самом деле, осуществляется по пропорциям исходного изображения.
Параметры $w=133 и $h=100 являются ограничителями максимальных размеров уменьшенной копии по ширине и высоте. Т.е. при масштабировании учитывается только один из этих параметров, а второй размер высчитывается автоматически исходя из пропорций исходного изображения.


А в скрипте вызов функции надо подправить на:

resizeimg($bigDir.$images, $smallDir.$image_name, $maxWidth, $maxHeight);

Чтобы использовались заданные в начале скрипта, конфигурационные переменные...

   
 
 автор: Boss (с работы)   (11.07.2006 в 13:36)
 
   для: YAN   (10.07.2006 в 14:36)
 

Ихмо

Лучше сделать 2 каталога, в одном хранить большие фото и в другом уменьшенные копии этих фоток(уменьшать при загрузке например), потому что каждый раз уменьшать фотки - это жестого по отношении к ресурсам сервера.

   
 
 автор: tuder   (11.07.2006 в 13:45)   письмо автору
 
   для: Boss (с работы)   (11.07.2006 в 13:36)
 

А в последнем варианте разве не так? Фото будут уменьшаться только при первом обращении к ним. Например, если если пользователи сами грузят свои фото.


$bigDir = 'image/'; // Каталог с изображениями 
$smallDir = "image/small/"; // Каталог для помещения уменьшенных превьюшек



 убрано выполнение функции при уже имеющейся превьюшке. Для ускорения работы вывода каталога изображений


    // Если уменьшенная копия уже есть - выходим из функции 
    if (file_exists($smallimage)) { 
       return true; 
    }


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

   
 
 автор: YAN   (12.07.2006 в 13:30)   письмо автору
 
   для: tuder   (11.07.2006 в 13:45)
 

Ух ты. Зашибись!
Все пашет!!!
Огромное спасибо!!!!!!

   
 
 автор: YAN   (12.07.2006 в 22:40)   письмо автору
 
   для: YAN   (12.07.2006 в 13:30)
 

Ой. Помогите. В моем случае маленькая ошибка.
Как сделать что бы таблица была не бесконечной.
Но она была. Допустим 3 фотки в длинну...
Извените за не столь не цензурные картинки...

   
 
 автор: CrazyAngel   (12.07.2006 в 23:16)   письмо автору
 
   для: YAN   (12.07.2006 в 22:40)
 

Вы просто когда картинку выводите прибовляйте 1 к какой нибуть переменной, и когда будет 3 то начинайте новый ряд и обнуляйте переменную =)


<?
   
// Some configuration variables !
   
include('imgresize.php'); // подключаем функцию
   
$maxWidth 90;
   
$maxHeight 90;
   
$maxCols 5;
   
$i 0;
   
$bigDir 'image/'// Каталог с изображениями
   
$smallDir "image/small/"// Каталог для помещения уменьшенных превьюшек

   
$AutorisedImageType = array ("jpg""jpeg""gif""png");
?>

<center>
<table border='1' cellspacing='5' cellpadding='5' style="border-collapse:collapse; border-style: dotted">
<tr>

   <?
   
// Open bigDir
   
$dh opendir($bigDir);
   while (
false !== ($filename readdir($dh))) {
       
$filesArray[] = $filename;
   }

   
// Display and resize
   
foreach ($filesArray as $images) {

       
$ext strtolower(substr($imagesstrpos($images".")+1strlen($images)));

       if( 
in_array($ext$AutorisedImageType) ) {
       
$image_name=strtolower($images);
       
$filename=$bigDir.$image_name;
       
resizeimg($bigDir.$images$smallDir.$image_name9090);
       if (
file_exists($smallDir.$images)) {
          
$images=$smallDir.$images;
       } else {
          
$images=$bigDir.$images;
       }
           if(
$i == $maxCols) {
               echo 
"</tr><tr>";
               
$i 0$i++;
           }
           echo 
"<td align='center' valign='middle'><a href='$filename' target=_blank><img src='".$images."'></a></td>";
       }
   }
   echo 
"</tr><tr>";
   
reset ($filesArray);
   foreach (
$filesArray as $images) {

      
$ext strtolower(substr($imagesstrpos($images".")+1strlen($images)));

      if( 
in_array($ext$AutorisedImageType) ) {

         
$image_name=strtolower($images);
         
$filename=$bigDir.$image_name;
         list(
$width$height$type$attr) = @getimagesize$filename );
         if(
$i == $maxCols) {
            echo 
"</tr><tr>";
            
$i 0$i++;
         }
         if(
$tr==3) {
         
$tr=0;
         echo 
"</tr><tr>";
         }
           echo 
"<td align='center' valign='middle'><a href='$filename' target=_blank>$image_name</a><p>$width x $height</p></td>";
     
$tr =$tr+1;
      }
   }
?>
</tr>
</table>
</center> 


незнаю тот ли скрипт я модифицировал =)

   
 
 автор: elenaki   (13.07.2006 в 10:07)   письмо автору
 
   для: CrazyAngel   (12.07.2006 в 23:16)
 

a $maxCols = 5; HA 4TO?

   
 
 автор: YAN   (24.08.2006 в 18:40)   письмо автору
 
   для: elenaki   (13.07.2006 в 10:07)
 

Помогите!!!!!
Как токо не коверял этот скрипт, все ровно получается не то что надо!
Даже выставил в начале:

<? 
   
// Some configuration variables ! 
   
include('imgresize.php'); //   $maxWidth = 150; 
   
$maxHeight 150
   
$maxCols 2
   
$i 0
   
$bigDir '1/';    
   
$smallDir "1/small/"
   
$AutorisedImageType = array ("jpg""jpeg""gif""png"); 
?> 

Надо чтобы было максимум 5 фото в длинну. И остольные на следущих строках.

   
 
 автор: YAN   (24.08.2006 в 19:36)   письмо автору
 
   для: YAN   (24.08.2006 в 18:40)
 

Людиии. Помогите!!!!

   
 
 автор: YAN   (24.08.2006 в 21:54)   письмо автору
 
   для: YAN   (24.08.2006 в 19:36)
 

:-(

   
 
 автор: куч1963   (25.08.2006 в 07:58)   письмо автору
 
   для: YAN   (24.08.2006 в 21:54)
 

попробуй переписать кусок кода
if($i == $maxCols) {
echo "</tr><tr>";
$i = 0; $i++;
}
if($tr==3) {
$tr=0;
echo "</tr><tr>";
}

вот так
if($final == 0) echo "<tr>";
echo "<td>здесь твои данные</td>";
$final++;
if($final == 3)
{
echo "</tr>";
$final = 0;
}
Только подойдет ли для этой цели цикл foreach?

   
Rambler's Top100
вверх

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