webForumDet fria alternativet

ställa in storlek på thumbs i PHP

15 svar · 548 visningar · startad av ullan

ullanMedlem sedan aug. 200442 inlägg
#1

Kan inget om PHP men har hittat ett bildvisarscript som gör thumbnails av bilderna och öppnar de större bilderna i en bildvisare med framåt-bakåt knappar.

Nu undrar jag om man kan fixera storleken på thumnailen så att alla är lika stora? Just nu blir de bara 5 ggr så små som originalbilden. Jag bifogar koden. Tacksam för all hjälp jag kan få!

<?
//
// SPA : Simple Photo Album.
// version 0.2
// author: Ilann Cohen - http://ilannweb.free.fr
//

//You may customize the parameters sections
//

// START OF PARAMETERS SECTION
$doc_title = "Album generated by Simple Photo Album"; //web page title
$columns=10;                  //number of images per line 
$ratio=5;                    //ratio imageSize / thumbnailImageSize 
$quality=5;                  //thumbnail image quality (0: worst to 100:best)
$scriptname= "index.php";    //filename of this script 
$thumb_dir = "thumb";        //directory created to stored small images
$thumb_prefix = "thumb_";    //prefix for generated images
// END OF PARAMETERS SECTION

echo "<html>\n<head>\n<title>$doc_title</title>\n";
echo "<body bgcolor=white>\n</head>\n\n\n";
echo  "<center>\n<P><BR><BR>\n\n";

$mydirectory= '.';          //directory in which images are fetched 
$counter=0;
$nbfiles = 0;
$currfile =  "";
$filestab[0] =  "";

$handle=opendir($mydirectory);

//create a directory for thumbnail images
if (! is_dir($thumb_dir))
{
   mkdir($thumb_dir, 0777);
}

while ($currfile = readdir($handle))  
{
// We get the extension of the current file and keep only image files 
   $extension= strtolower(substr( strrchr( $currfile,  "." ), 1 ));  
   if ($extension== "gif" || $extension== "jpg" || $extension== "jpeg" ||
       $extension== "png")
   {
      $nbfiles++;
      $currfile = trim($currfile);
      $filestab[$nbfiles] = $currfile;

      if ($ishome ==  "")
      {
         $size = GetImageSize($currfile);
         $width = $size[0] / $ratio;
         $height = $size[1] / $ratio;
         $format = $size[2]; //1 = GIF, 2 = JPG, 3 = PNG, 5 = PSD, 6 = BMP

        $currthumbfile = "./" . $thumb_dir . "/" . $thumb_prefix . $currfile;
        if (! file_exists($currthumbfile))
        {
           //GIF format is not supported anymore by GD lib...
           if ($format == 2) //JPG
                 $im = imagecreatefromjpeg($currfile);
           else if ($format == 3) //PNG
                 $im = imagecreatefrompng($currfile);
           if (!$im)
           {
               $currthumbfile = $currfile;
           }
           else
           {   
              Imagejpeg($im, $currthumbfile, $quality);
              ImageDestroy($im);
           }
        }

        $currfile = str_replace(" ","%20",$currfile); // Allow filenames with space characters
        $currthumbfile = str_replace(" ","%20",$currthumbfile); // Allow filenames with space characters

         echo  "<A HREF=$scriptname?ishome=1&filename=$currfile&filenumber=$nbfiles>\n";
         echo  "<IMG SRC=$currthumbfile WIDTH=$width HEIGHT=$height";
         $currfile = str_replace("%20"," ",$currfile); // Clean display of filenames with space characters
         echo " alt=\"Enlarge $currfile\">\n";
         $currfile = str_replace(" ","%20",$currfile);   //Clean display of filenames with space characters
         echo  "</A>\n";
         $counter++;
         if ($counter == $columns)
         {
            $counter = 0;
            echo  "<P><P><BR>";
         }
      }
   }
}
closedir($handle);

if ($ishome == 1)
{
   echo  "<P>\n";
   $filename = str_replace(" ","%20",$filename);   // Allow filenames with space characters
   $filename = stripslashes($filename);   // Allow filenames with ' characters
   echo  "<IMG SRC=$filename>\n";
   $display = str_replace("%20"," ",$filename);   // Clean display of filenames with space characters
   echo "<br><b> $display </b><br>";
   echo  "<P><BR>\n\n";

   if ($filenumber != 1)
   {
      $prevnumber = $filenumber - 1;
      $filestab[$prevnumber] = str_replace(" ","%20",$filestab[$prevnumber]);   // Allow filenames with space characters
      echo  "[<A HREF=$scriptname?ishome=1&filename=$filestab[$prevnumber]&filenumber=$prevnumber>";
      echo  " << Previous</A>]  \n";
   }

   echo  " &nbsp;&nbsp;[<A HREF=$scriptname>Main Page</A>]&nbsp;&nbsp;\n";
   echo  "  \n" ;
   if ($filenumber != $nbfiles)
   {

      $nextnumber = $filenumber + 1;
      $filestab[$nextnumber] = str_replace(" ","%20",$filestab[$nextnumber]);   // Allow filenames with space characters
      echo  "[<A HREF=$scriptname?ishome=1&filename=$filestab[$nextnumber]&filenumber=$nextnumber>";
      echo  "Next >></A>]\n";
   }

   echo "\n\n";
}
?>

<P><P><P><P><HR>
Generated by <A HREF=http://ilannweb.free.fr target="_top">SPA : Simple Photo Album</A>
</center>
</html>
MatteMedlem sedan aug. 20002 975 inlägg
#2

Kör då istället:

         $size = GetImageSize($currfile);
         $width = 150;
         $height = round($size[1] * $width / $size[0]);

Varför köra sådan usel kvalitet som 5 när du sparar som JPEG ?
70 är defaultvärdet, och ska man göra någon ändring på detta bör det vara uppåt.

ullanMedlem sedan aug. 200442 inlägg
#3

Tack för tipset. Dessvärre blir thumbsen pyttesmå när jag bara klistrade in kodsnutten istället för $ratio. Vad kan det bero på? Som sagt, är helt nybörjare på detta...Så här ser det ut nu:

http://www.vallnet.nu/mp00361-p1/galleri/index.php

$doc_title = "Album generated by Simple Photo Album";

$columns=10;                                       
$size = GetImageSize($currfile); 
         $width = 150; 
         $height = round($size[1] * $width / $size[0]);              	
$quality=70;                     						
$scriptname= "index.php";    					
$thumb_dir = "thumb";        						
$thumb_prefix = "thumb_";    													
// END OF PARAMETERS SECTION
PeddaMedlem sedan juni 20006 032 inlägg
#4

Hur breda vill du ha dom?
Ändra
$width = 150;
till den bredd som du vill ha.

red/ sen så ska du lägga koden i if-satsen.

MatteMedlem sedan aug. 20002 975 inlägg
#5

Tag bort width= och height= från dina länkar. Det är sannolikt dessa som gör bilden minimal.

ullanMedlem sedan aug. 200442 inlägg
#6

Provade det ni sa men det fungerar ändå inte. Hittade ett ställe i koden där den verkade ställa in storlek. Kan det vara så att man måste ändra där ochså om man ändrat uppe i parameter-sektionen? Skulle vilja ha dem 71 x 71 px.

<?

$doc_title = "Album generated by Simple Photo Album"; 
$columns=10;                                       
$size = GetImageSize($currfile); 
$width = 150; 
$height = round($size[1] * $width / $size[0]);         		 
$quality=70;                     				
$scriptname= "index.php";    					
$thumb_dir = "thumb";        						
$thumb_prefix = "thumb_";    												

echo "<html>\n<head>\n<title>$doc_title</title>\n";
echo "<body bgcolor=white>\n</head>\n\n\n";
echo  "<center>\n<P><BR><BR>\n\n";

$mydirectory= '.';          
$counter=0;
$nbfiles = 0;
$currfile =  "";
$filestab[0] =  "";

$handle=opendir($mydirectory);

//create a directory for thumbnail images
if (! is_dir($thumb_dir))
{
   mkdir($thumb_dir, 0777);
}

while ($currfile = readdir($handle))  
{
// We get the extension of the current file and keep only image files 
   $extension= strtolower(substr( strrchr( $currfile,  "." ), 1 ));  
   if ($extension== "gif" || $extension== "jpg" || $extension== "jpeg" ||
       $extension== "png")
   {
      $nbfiles++;
      $currfile = trim($currfile);
      $filestab[$nbfiles] = $currfile;

     [red] if ($ishome ==  "")
      {
         $size = GetImageSize($currfile);
         $width = $size[0] / $ratio;
         $height = $size[1] / $ratio;
         $format = $size[2]; //1 = GIF, 2 = JPG, 3 = PNG, 5 = PSD, 6 =[/red] BMP

        $currthumbfile = "./" . $thumb_dir . "/" . $thumb_prefix . $currfile;
        if (! file_exists($currthumbfile))
        {
           //GIF format is not supported anymore by GD lib...
           if ($format == 2) //JPG
                 $im = imagecreatefromjpeg($currfile);
           else if ($format == 3) //PNG
                 $im = imagecreatefrompng($currfile);
           if (!$im)
           {
               $currthumbfile = $currfile;
           }
           else
           {   
              Imagejpeg($im, $currthumbfile, $quality);
              ImageDestroy($im);
           }
        }

        $currfile = str_replace(" ","%20",$currfile); // Allow filenames with space characters
        $currthumbfile = str_replace(" ","%20",$currthumbfile); // Allow filenames with space characters

         echo  "<A HREF=$scriptname?ishome=1&filename=$currfile&filenumber=$nbfiles>\n";
         echo  "<IMG SRC=$currthumbfile WIDTH=$width HEIGHT=$height";
         $currfile = str_replace("%20"," ",$currfile); // Clean display of filenames with space characters
         echo " alt=\"Enlarge $currfile\">\n";
         $currfile = str_replace(" ","%20",$currfile);   //Clean display of filenames with space characters
         echo  "</A>\n";
         $counter++;
         if ($counter == $columns)
         {
            $counter = 0;
            echo  "<P><P><BR>";
         }
      }
   }
}
closedir($handle);

if ($ishome == 1)
{
   echo  "<P>\n";
   $filename = str_replace(" ","%20",$filename);   // Allow filenames with space characters
   $filename = stripslashes($filename);   // Allow filenames with ' characters
   echo  "<IMG SRC=$filename>\n";
   $display = str_replace("%20"," ",$filename);   // Clean display of filenames with space characters
   echo "<br><b> $display </b><br>";
   echo  "<P><BR>\n\n";

   if ($filenumber != 1)
   {
      $prevnumber = $filenumber - 1;
      $filestab[$prevnumber] = str_replace(" ","%20",$filestab[$prevnumber]);   // Allow filenames with space characters
      echo  "[<A HREF=$scriptname?ishome=1&filename=$filestab[$prevnumber]&filenumber=$prevnumber>";
      echo  " << Previous</A>]  \n";
   }

   echo  " &nbsp;&nbsp;[<A HREF=$scriptname>Main Page</A>]&nbsp;&nbsp;\n";
   echo  "  \n" ;
   if ($filenumber != $nbfiles)
   {

      $nextnumber = $filenumber + 1;
      $filestab[$nextnumber] = str_replace(" ","%20",$filestab[$nextnumber]);   // Allow filenames with space characters
      echo  "[<A HREF=$scriptname?ishome=1&filename=$filestab[$nextnumber]&filenumber=$nextnumber>";
      echo  "Next >></A>]\n";
   }

   echo "\n\n";
}
?>

<P><P><P><P><HR>
Generated by <A HREF=http://ilannweb.free.fr target="_top">SPA : Simple Photo Album</A>
</center>
</html>
oskobMedlem sedan maj 20021 558 inlägg
#7

Är det jobbigt för servern att spara om bilderna såhär? Måste den göra om det för varje person som tittar på sidan eller görs det en gång och sen är det som vanligt att man har en thumb-bild och en vanlig?

ullanMedlem sedan aug. 200442 inlägg
#8

Det verkar som om den bara laddar en gång! Så tolkar jag det iaf.

http://ilannweb.free.fr/

MatteMedlem sedan aug. 20002 975 inlägg
#9

Du har fortfarande på rad 46-47 kvar:

         $width = $size[0] / $ratio;
         $height = $size[1] / $ratio;

Tag bort dessa rader.

Ändra i början av ditt skript (rad 7-8) till:

$width = 71; 
$height = 71;

Ändra

        if (! file_exists($currthumbfile))
        {
           //GIF format is not supported anymore by GD lib...
           if ($format == 2) //JPG
                 $im = imagecreatefromjpeg($currfile);
           else if ($format == 3) //PNG
                 $im = imagecreatefrompng($currfile);
           if (!$im)
           {
               $currthumbfile = $currfile;
           }
           else
           {   
              Imagejpeg($im, $currthumbfile, $quality);
              ImageDestroy($im);
           }
        }

till

        if (! file_exists($currthumbfile))
        {
           switch ($format) {
             case 1: $im_src = imagecreatefromgif($currfile);break;
             case 2: $im_src = imagecreatefromjpeg($currfile);break;
             case 3: $im_src = imagecreatefrompng($currfile);break;
           }

           if (!$im_src)
           {
               $currthumbfile = $currfile;
           }
           else
           {
              $img_dst = imagecreatetruecolor($width, $height);
              imagecopyresampled ($img_dst, $im_src, 0, 0, 0, 0, $width, $height, imagesx($im_src), imagesy($im_src));

              Imagejpeg($im_src, $currthumbfile, $quality);
              ImageDestroy($im_src);
           }
        }

Rensa bort filerna du har i din thumbnail-katalog, och kör om skriptet.

Det som stör mig en del är att du inte får med $width och $height i dina länkar.
Kolla vad som händer med dessa nu.

ullanMedlem sedan aug. 200442 inlägg
#10

Dessvärre funkar det fortfarande inte. Bytte ut koden och tog bort en massa temp-filer som låg i en av katalogerna. Var det dessa du menade?

MatteMedlem sedan aug. 20002 975 inlägg
#11

I din katalog där du har dina bilder, har du en katalog 'thumb' med dina thumbnails. Rensa denna.

Gäller din länk till albumet som du gav tidigare i tråden ?
Då har du fortfarande tomma värden på WIDTH och HEIGHT. Jag kan inte se i koden du visat hur detta kan vara möjligt.
Tills vidare, ta bort dessa från dina länkar. Alltså i HTML-koden i <img>-taggarna.

ullanMedlem sedan aug. 200442 inlägg
#12

Menar du att jag ska ta bort alla thumbnails och att scriptet asnvänder sig av originalbilderna? Beträffande det där du skrev om width och height blir jag förvirrad, därför att den enda fil jag har är index.php. Det finns ingen html-sida, utan den skapas tydligen av php-skriptet. Så jag vet inte var jag ska ändra width och height. Länken gäller fortfarande.

MatteMedlem sedan aug. 20002 975 inlägg
#13

Du har koden:

echo  "<IMG SRC=$currthumbfile WIDTH=$width HEIGHT=$height";

Enligt det länk du gav tidigare får $width och $height ingen värde.
I den genererade HTML-hoden står det: WIDTH= HEIGHT=
Detta kommer eventuellt att ge dig minimala thumbnails.

Rensa katalogen med thumbnails.
Skriptet kommer att generera nya.

ullanMedlem sedan aug. 200442 inlägg
#14

Aha, nu funkar det!! :P Tack så mycket för hjälpen! Du eller någon annan råkar inte veta hur man får själva bildvisaren att öppnas i ett popupfönster?

MatteMedlem sedan aug. 20002 975 inlägg
#15

Testa med att ändra

echo  "<A HREF=$scriptname?ishome=1&filename=$currfile&filenumber=$nbfiles>\n";

till

echo  "<A HREF='$scriptname?ishome=1&filename=$currfile&filenumber=$nbfiles' target='popup' 
        onclick=\"window.open('', 'popup', 'width=400, height=500, scrollbars=yes, resizable=yes')\">\n";

alternativt

echo  "<A HREF='#' onclick=\"window.open('$scriptname?ishome=1&filename=$currfile&filenumber=$nbfiles', '', 'width=400, height=500, scrollbars=yes, resizable=yes');return false;\">\n";
ullanMedlem sedan aug. 200442 inlägg
#16

Det gick fint! Tack för all hjälp!!

139 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)