Avatar billede bad24 Nybegynder
29. marts 2003 - 15:32 Der er 16 kommentarer og
1 løsning

Random, thumbnail??

Hejsa.

Er der nogen, som kender et script. Som kan oprette thumbnails og derefter vise dem random når siden opdateres.
Men det skal stadig være som et link. Så man kan se billedet i fuld størrelse.

Med Venlig Hilsen

// Lars
Avatar billede abpdk Nybegynder
29. marts 2003 - 16:40 #1
Følgende vælger et tilfældigt billede fra folderen givet ved $image_folder. Hvis det tilsvarende thumbnail ikke findes i mappen givet ved $thumb_folder oprettes dette og vises som et link til det oprindelige billede. Det var sådan du mente, ik?

<html>
  <body>
<?php
  $image_folder = 'images';
  $thumb_folder = 'thumbs';
 
  if ($handle = opendir($image_folder)) {
    while (($file = readdir($handle)) != false) {
      if ($file != "." && $file != "..") {
        $files[] = $file;
      }
    }
    closedir($handle);

    srand((double)microtime()*1000000);
    $randID = rand(0, sizeof($files)-1);

    if (!file_exists("$thumb_folder/$files[$randID]")) {
      thumbnail($image_folder, $thumb_folder, $files[$randID], 100, 100);
      echo "thumb generated!<br>";
    }

    echo "<a href=\"$image_folder/$files[$randID]\"><img src=\"$thumb_folder/$files[$randID]\"></a>";
  }

  function thumbnail($image_path,$thumb_path,$image_name,$thumb_width) {
      $src_img = imagecreatefromjpeg("$image_path/$image_name");
      $origw=imagesx($src_img);
      $origh=imagesy($src_img);
      $new_w = $thumb_width;
      $diff=$origw/$new_w;
      $new_h=$new_w;
      $dst_img = imagecreate($new_w,$new_h);
      imagecopyresized($dst_img,$src_img,0,0,0,0,$new_w,$new_h,imagesx($src_img),imagesy($src_img));

      imagejpeg($dst_img, "$thumb_path/$image_name");
      return true;
  }
?>
  </body>
</html>

PS: Det kræver GD, og virker pt. kun med jpg-filer, men andre formater kan tilføjes.
Avatar billede bad24 Nybegynder
29. marts 2003 - 17:12 #2
Jeg kan ikke få path til at virke, når jeg bruger include. Den vil ikke vælge den rette mappe. Kan jeg ikke også få den blå kant fjernet ?

// Lars
Avatar billede abpdk Nybegynder
29. marts 2003 - 17:16 #3
Jeg forstår ikke lige hvad du mener med "når jeg bruger include", men den blå kant på billederne kan du vist fjerne ved at bruge

echo "<a href=\"$image_folder/$files[$randID]\"><img src=\"$thumb_folder/$files[$randID]\" border=0></a>";

(forskellen ligger i border=0)
Avatar billede bad24 Nybegynder
29. marts 2003 - 17:22 #4
altså når jeg bruger denne <?php include "scripts/random_pic/random_pic.php";?>

Så passer genvejen ikke til mapperne (path 'images')
Er det muligt at få billedet åbnet i et nyt vindue, når man trykker på det?

// Lars
Avatar billede abpdk Nybegynder
29. marts 2003 - 17:27 #5
Hvis du vil ha' billederne åbnet i et nyt vindue (uden at rode javascript ind i det) tilføjer du bare target="_blank" til linket. Altså:

echo "<a target=\"_blank\" href=\"$image_folder/$files[$randID]\"><img src=\"$thumb_folder/$files[$randID]\"></a>";
Avatar billede abpdk Nybegynder
29. marts 2003 - 17:28 #6
Jeg kikker lige på det med include...
Avatar billede abpdk Nybegynder
29. marts 2003 - 17:31 #7
Jeg tror det problem du har med include, er at stierne i $image_folder og $thumb_folder er relative. Dvs. at de er sat (i mit script i hvert fald) sådan at folderne ligger i samme folder som scriptet. Har du prøvet med den direkte sti?
Avatar billede bad24 Nybegynder
29. marts 2003 - 17:44 #8
Det virker nu ;-)
Du skal have rigtig mange tak.

jeg har måske bare lige et sidste spørgsmål. Du snakkede noget med noget Java. Kan jeg få den til at poppe billedet op. så browseren selv tilpasser sig til billedet?

// Lars
Avatar billede abpdk Nybegynder
29. marts 2003 - 17:55 #9
Ikke java, men javascript! Ja det kan du sagtens. Jeg har ikke lige koden, men jeg ser lige om jeg kan smække noget brugbart sammen.
Avatar billede bad24 Nybegynder
29. marts 2003 - 17:56 #10
okay, du skal have mange tak. Har du en hjemmeside eller noget?

// Lars
Avatar billede abpdk Nybegynder
29. marts 2003 - 17:58 #11
Hvad tænker du på?
Avatar billede bad24 Nybegynder
29. marts 2003 - 17:59 #12
syntes bare jeg ville skrive en lille tak eller noget på min hjemmeside ;)
Avatar billede abpdk Nybegynder
29. marts 2003 - 18:03 #13
Det behøver du nu ikke, men jeg vil da gerne se resultatet.
Avatar billede bad24 Nybegynder
29. marts 2003 - 18:03 #14
www.myass.dk ;-)

// Lars
Avatar billede abpdk Nybegynder
29. marts 2003 - 18:24 #15
Ok, jeg har ikke selv lavet følgende men det gør vel ikke noget (http://www.codelifter.com/main/javascript/autosizeimagepopup.html). Tilføj dette til din <head>-sektion i den fil hvor du bruger <?php include "scripts/random_pic/random_pic.php";?> :

  <script>

    // Script Source: CodeLifter.com
    // Copyright 2003
    // Do not remove this notice.

    PositionX = 100;
    PositionY = 100;

    defaultWidth  = 500;
    defaultHeight = 500;

    // Set autoclose true to have the window close automatically
    // Set autoclose false to allow multiple popup windows

  var AutoClose = true;

  // Do not edit below this line...
  // ================================
  if (parseInt(navigator.appVersion.charAt(0))>=4) {
    var isNN=(navigator.appName=="Netscape")?1:0;
    var isIE=(navigator.appName.indexOf("Microsoft")!=-1)?1:0;}
    var optNN='scrollbars=no,width='+defaultWidth+',height='+defaultHeight+',left='+PositionX+',top='+PositionY;
    var optIE='scrollbars=no,width=150,height=100,left='+PositionX+',top='+PositionY;

    function popImage(imageURL,imageTitle) {
      if (isNN){imgWin=window.open('about:blank','',optNN);}
      if (isIE){imgWin=window.open('about:blank','',optIE);}
      with (imgWin.document) {
        writeln('<html><head><title>Loading...</title><style>body{margin:0px;}</style>');writeln('<sc'+'ript>');
        writeln('var isNN,isIE;');writeln('if (parseInt(navigator.appVersion.charAt(0))>=4){');
        writeln('isNN=(navigator.appName=="Netscape")?1:0;');writeln('isIE=(navigator.appName.indexOf("Microsoft")!=-1)?1:0;}');
        writeln('function reSizeToImage(){');writeln('if (isIE){');writeln('window.resizeTo(100,100);');
        writeln('width=100-(document.body.clientWidth-document.images[0].width);');
        writeln('height=100-(document.body.clientHeight-document.images[0].height);');
        writeln('window.resizeTo(width,height);}');writeln('if (isNN){');     
        writeln('window.innerWidth=document.images["George"].width;');writeln('window.innerHeight=document.images["George"].height;}}');
        writeln('function doTitle(){document.title="'+imageTitle+'";}');writeln('</sc'+'ript>');

        if (!AutoClose) writeln('</head><body bgcolor=000000 scroll="no" onload="reSizeToImage();doTitle();self.focus()">')
        else writeln('</head><body bgcolor=000000 scroll="no" onload="reSizeToImage();doTitle();self.focus()" onblur="self.close()">');
        writeln('<img name="George" src='+imageURL+' style="display:block"></body></html>');
        close();       
      }
    }
  </script>

og brug...

    echo "<a href=\"java script:popImage('$image_folder/$files[$randID]','Some Title')\"><img src=\"$thumb_folder/$files[$randID]\"></a>";

...i selve scriptet.

Du vil altid (som dette javascript også gør) skulle tage stilling til browser-typen, men hvis du nu har adgang til Mysql kunne du gemme ting som højde og bredde på billedet når du laver dine thumbnails og derved bare kunne åbne en popup med disse dimensioner. Man kunne selvfølgelig også bare åbne billedet i php og aflæse dimensionerne direkte og så bruge dem, men det ville gøre scriptet lidt langsomere. Det med mysql er desuden også en KÆMPE fordel hvis du ligger alt for mange billeder i din image_folder, da scriptet jo gennemlæser hele folderen hver gang.
Avatar billede bad24 Nybegynder
29. marts 2003 - 18:43 #16
jeg takker mange gange.
du har virkelig redet min dag ;-)

// Lars
RIGTIG MANGE TAK!
Avatar billede abpdk Nybegynder
29. marts 2003 - 18:44 #17
Var så lidt
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester