Avatar billede jjdk Nybegynder
25. august 2006 - 17:24 Der er 6 kommentarer og
1 løsning

Tilretning af kode til foto-visning

Hej
Jeg har her på Eksperten fundet nedenstående kode og anvendt det i 1 års tid.
Koden genererer thumbnails ud fra de billed-filer der ligger i mappen. Når der så klikkes på en Thumbnails, bliver det pågældende billede vist. Her kan jeg så trykke tilbage nederst eller gå tilbage ved at klikke på billedet.
Men jeg mangler en funktion, der gør at jeg kan klikke til næste billede eller tilbage til forrige billede. Det kunne eksempelvis være et par knapper [<<] / [>>] ovenfor billedet på hver sin side af billedteksten.
Eksempel på brugen kan ses her:
http://www.vardeborg.dk/fdf/fotoarkiv/landslejr2006/09soendag/fotos/fotothumb.php

Koden ser sådan her ud:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Fotosider</title>

</head>

<?
// DEFINEREDE VARIABLERNE:


// Thumbnails max størrelse
$maxwidth = 150;
$maxheight = 100;

// Thumbnail-mappens navn
$thumbnail_mappe = "thumbnails";

// NUMRE AF <TD> PR. <TR> ( PA DANSK/ENGELSK: COLUMNS PA SIDEN :-) )
$td='5';

// BAGGRUNDSFARVE
$bg='white';

// SKAL NAVNES VISES PÅ BILLEDET
$name='1'; // 1 = yes, 0 = no
// SHOW TITLE PA SIDEN
$pagetitle='Landslejr 2006';

### --- PAS PA MED AT RETTET NOGET HERUNDER --- ###

function imageresizejpeg($sourcefile,$maxwidth,$maxheight,$destinationfile) { // funktion til resize eaf jpg-filer

    global $newwidth,$newheight;

  if($img_src=@imagecreatefromjpeg($sourcefile)) {
        copy($sourcefile, $destinationfile);
        $info=@getimagesize($sourcefile);

        if($info[1]>$maxheight || $info[0]>$maxwidth)
        {
        $ratio_height=$maxheight/$info[1];
        $ratio_width=$maxwidth/$info[0];
        $ratio=min($ratio_width,$ratio_height);
        $newwidth=intval($info[0]*$ratio);
        $newheight=intval($info[1]*$ratio);
        $img_dst=imagecreatetruecolor($newwidth,$newheight);
        imagecopyresampled($img_dst, $img_src, 0, 0, 0, 0, $newwidth, $newheight, $info[0], $info[1]);
        @imagejpeg($img_dst, $destinationfile);
        imagedestroy($img_dst);
        }
        else
        {
        $newwidth=$info[0];
        $newheight=$info[1];
        }
    @imagedestroy($img_src);
    return true;
    }
    else
    {
    return false;
    }
}

function get_size($info,$maxwidth,$maxheight) { // funktion til beregning af størrelse af ikke-jpg-filer
    global $newwidth,$newheight;

    if($info[1]>$maxheight || $info[0]>$maxwidth) {
        $ratio_height=$maxheight/$info[1];
        $ratio_width=$maxwidth/$info[0];
        $ratio=min($ratio_width,$ratio_height);
        $newwidth=intval($info[0]*$ratio);
        $newheight=intval($info[1]*$ratio);
    return true;
    }
    else
    {
      $newwidth=$info[0];
      $newheight=$info[1];
    }
}

### --- PAS PA MED AT RETTET NOGET HERUNDER --- ###
$handle=opendir('.');
// GO
$piccy=array();
$count=0;
// SCAN THE DIR
//while (($filename = readdir($handle))!==false) {
while ($filename = readdir($handle)) {
  // TYPER FILER DER KAN HENTES
  if (eregi("(\.jpg|\.gif|\.bmp|\.png|\.JPG|\.GIF|\.BMP|\.PNG)$", $filename)) { // hvis fil er en billedfil
    $piccy[$count] = $filename;
    $count++;
  }
}
// LUK DIR
closedir($handle); 
// SORTERE FILERNE
sort($piccy);
reset($piccy);

// VISER STORT IMAGE
if ($_GET['large']){ // hvis large er med som query-string
$large = $_GET['large'];
        echo "<html><head><title>" . $pagetitle ."" . $large . "</title></head><body bgcolor=" . $bg . ">";
  echo '<div align="center">';
// HVIS NAVNET ER SAT TIL AT VISES?
  if ($name=="1") {
    echo '<br><font face="verdana" size="1">Dit billedevalg: ' . $large . '</font>';
  }
// VIS IMAGE
  echo '<table width="100%" border=0 cellpadding=0 cellspacing=0>';
  echo '<tr>';
  echo '<td valign="middle" align="center"><a href=java script:history.back(-1)><img src="'.$large.'" alt="'.$large.'" border=0></a></td>';
  echo '<br>';
  echo '</tr></table>';
  echo '<br><br>';
  echo '<a href=java script:history.back(-1)>';
  echo '<font face="verdana" size="1">Tilbage til galleri</font></a>';
// NO PROBLEMO, LAVER TABLER FOR THUMBNAILS:
} else { // hvis large ikke er med som query-string
// START TABLE SAET cellpadding, cellspacing, colors, 
echo '<html><head><title>'. $pagetitle .'</title>';
echo '<head>';
echo "<body bgcolor=" . $bg . ">";
echo '<div align="center"><b><font face="verdana" size="3">' . $pagetitle . '</b></font><br>';
echo '<br><table width="100%" border=0 cellpadding=0 cellspacing=0>';
echo '<tr>';
// FORDI <TD> DET ER SAT AF BRUGER, LAV THE PERCENTAGES:
$divider=ceil(100/$td);
if (($divider*$td)>100) $divider--;
// HENT IMAGES
for ($l=0;$l<=sizeof($piccy)-1;$l++){
  $isend = strpos((($l)/$td),".");
  if (!$isend && ($l!=0)){
  echo "</tr>\n<tr><td colspan=$td><br></td></tr>\n<tr>\n";
  }
  if ($l==0){
  echo "\n";
  }
  // START <TD>
  echo '<td width="'.$divider.'%" valign="middle" align="center">';
  // FA STORT BILLEDE (IF SELECTED)
  echo "<a href=\"$PHP_SELF?large=" . $piccy[$l] . "\">";
  // VISER THUMBNAILS
  $thumb_mappe = $thumbnail_mappe . "/"; // vi sætter en skråstreg efter undermappens navn
  $thumb_name = $thumb_mappe . "thumbnail_" . $piccy[$l];
  if (eregi("(\.jpg|\.JPG)$", $piccy[$l])) { // hvis filtype er jpg
    if(!file_exists($thumb_name)) {
  imageresizejpeg($piccy[$l],$maxwidth,$maxheight,$thumb_name) ;
    } else {
  $size=getimagesize($piccy[$l]); // laver et array med width og hight
  get_size($size,$maxwidth,$maxheight) ;
    } 
  echo '<img src="' . $thumb_name . '" alt="' . $piccy[$l] . '" border=0 width="' . $newwidth .'" height="' . $newheight .'"></a><br><br>';
  } else { // hvis filtype ikke er jpg
  $size=getimagesize($piccy[$l]); // laver et array med width og hight
  get_size($size,$maxwidth,$maxheight) ;
  echo '<img src="' . $piccy[$l] . '" alt="' . $piccy[$l] . '" border=0 width="' . $newwidth .'" height="' . $newheight .'"></a><br><br>';
  }
  // OM NAVNET ER SAT TIL AT BLIVE VIST?
  if ($name=="1") {
  echo '<font face="verdana" size="1">' . $piccy[$l] . '</font>';
  }
  echo '</td>';
  echo"\n";
} // for-løkken slutter

  echo '</tr></table></div>';
} // else slutter
  echo '<br><br><br><div align="center"><font face="verdana" size="1"></a></font></div></body></html>';
?>
Avatar billede skagen Nybegynder
25. august 2006 - 22:43 #1
Indsæt nedenstående umiddelbart før linien "// VIS IMAGE". Dette placerer linkene over billedet. Du kan et. flytte udskrivningen af linkene, hvis du vil have dem et andet sted.

########## NY KODE START ##########
// FIND FORRIGE OG NÆSTE
$i = 0;
$prev = "";
while ( ($piccy[$i] != $large) && ($i < sizeof($piccy)) ) {
    $prev = $piccy[$i];
    $i++;
}
if ($i == sizeof($piccy)-1) {
    $next = "";
} else {
    $next = $piccy[$i+1];
}
// VIS FORRIGE OG NÆSTE
echo "<br><br>";
echo "<a href=?large=".$prev.">[&lt; &lt;]</a>";
echo "&nbsp;&nbsp;&nbsp;&nbsp;";
echo "<a href=?large=".$next.">[&gt; &gt;]</a>";
########## NY KODE SLUT ##########

Desuden bør du erstatte "java script:history.back(-1)" med "." (2 steder), ellers vil du ikke springe tilbage til oversigten, men blot tilbage til det forrige billede.
Avatar billede jjdk Nybegynder
26. august 2006 - 09:00 #2
Skide godt - så er vi der næsten.
MEN - når jeg klikker igennem fotoene og kommer til det sidste og trykker på [>>], så går den tilbage til oversigten. Det er ikke så smart, hvis man fra oversigten starter med at klikke på at af de sidste fotos. Så synes jeg det er smartere, hvis den "hopper" videre til det første billede - altså en uendelig lykke med forrige og næste knapperne.
Kan du også hjælpe med den detalje?
Avatar billede jjdk Nybegynder
26. august 2006 - 11:18 #3
På den anden side - så er det egentligt meget smart, at den går tilbage til oversigten, når sidste foto er set.
Du skal have tak for hjælpen.
Sender du et svar!
Avatar billede skagen Nybegynder
26. august 2006 - 14:13 #4
For at fjerne [>>] når man ser det sidste billede og [<<] når man ser første billede (erstat tilsvarede kode):

// VIS FORRIGE OG NÆSTE
echo "<br><br>";
if ($prev != "")
    echo "<a href=?large=".$prev.">[&lt; &lt;]</a>";
echo "&nbsp;&nbsp;&nbsp;&nbsp;";
if ($next != "")
    echo "<a href=?large=".$next.">[&gt; &gt;]</a>";


For at køre i ring (erstat tilsvarede kode):

// FIND FORRIGE OG NÆSTE
$i = 0;
$prev = $piccy[sizeof($piccy)-1];
while ( ($piccy[$i] != $large) && ($i < sizeof($piccy)) ) {
    $prev = $piccy[$i];
    $i++;
}
if ($i == sizeof($piccy)-1) {
    $next = "$piccy[0]";
} else {
    $next = $piccy[$i+1];
}
Avatar billede jjdk Nybegynder
26. august 2006 - 14:54 #5
Det kalder jeg service - tusind tak.
Hvis jeg lige må spørge om en lille ting:
Thumbnailene bliver jo genereret af serveren og bliver "smidt" i mappen "thumbnails". I praksis er jeg nødt til at oprette denne mappe med mit FTP-program og derefter ændre attributten, så mappen ikke er skrivebeskyttet.
Kan man via koden oprette mappen og gør den "skrivbar"? Så sparer man jo lidt manuelt arbejde.
Avatar billede skagen Nybegynder
26. august 2006 - 15:22 #6
Velbekomme!

Ang. oprette mappe + rettigheder: Tjek php.net og slå op under mkdir og chmod. Jeg har ikke selv rodet så meget med dette. Plejer at klare dette "manuelt". Vær opmærksom på at der kan være forskellige begrænsninger alt efter hvilken webserver du er på (opsætning, operativ system, osv.).
Avatar billede jjdk Nybegynder
26. august 2006 - 15:24 #7
Ok - endnu engang tak.
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