Avatar billede kumutzu Nybegynder
26. oktober 2004 - 20:35 Der er 21 kommentarer og
2 løsninger

Galleri, hvor thumben selv formindsker billedet

Hej
Jeg har et galleri, der skal den bruge et thumb pic og så pic'et i normal størrelse for at kunne lave en thumb, kan dette ikke laves så den tager det original billede og formindsker billedet til thumb størrelse og når man så klikker på det åbner i nyt stort original billede.

her er kilde koden:
<?

// DEFINERE VARIABLERNE:

// NUMRE AF <TD> PR. <TR> ( PA DANSK/ENGELSK: COLUMNS PA SIDEN :-) )
$td='2';
// BAGGRUNDSFARVE
$bg='white';
// SKAL NAVNES VISES PÅ BILLEDET
$name='0'; // 1 = yes, 0 = no
// SHOW TITLE PA SIDEN
$pagetitle='Gymfest billeder';

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

// DIRECTORY NAVN
$handle=opendir('.');

// GO
$piccy=array();
$count=0;
// SCAN THE DIR
while (($filename = readdir($handle))!==false) {
  // TYPER FILER DER KAN HENTES
  if (substr($filename,-4) == ".jpg" || substr($filename,-4) == ".gif" || substr($filename,-4) == ".png" || substr($filename,-4) == ".JPG" || substr($filename,-4) == ".GIF" || substr($filename,-4) == ".PNG"  || substr($filename,-4) == ".BMP" || substr($filename,-4) == ".bmp"){
  if (substr($filename,0,6) == "thumb_"){
    $piccy[$count] = $filename;
    $count++;
  }}}
// LUK DIR
closedir($handle); 
// SORTERE FILERNE
sort($piccy);
reset($piccy);

// VISER STORT IMAGE
if ($large){
        echo "<html><head><title>GYMFEST OG FREDAGSCAFÉ BILLEDER " .$large. "</title></head><body bgcolor=" . $bg . ">";
  echo '<div align="center">';
// HVIS NAVNET ER SAT TIL AT VISES?
  if ($name=="1") {
      if (!(file_exists($large))){
          echo "No file of that name is uploaded.";
          exit;
      }
      echo '<br><font face="verdana" size="1">Dit billede valg: ' . $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{
// START TABLE SAET cellpadding, cellspacing, colors, 
echo '<html><head><title> Gymfest billeder</title>';
echo '<head>';
echo "<body bgcolor=" . $bg . ">";
echo '<div align="center"><font face="verdana" size="1">' . $pagetitle . '</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=".substr($piccy[$l],6)."\">";
  // VISER THUMBNAILS
  echo '<img src="'.$piccy[$l].'" alt="'.$piccy[$l].'" border=0 width="224" height="168"></a><br><br>';
  // OM NAVNET ER SAT TIL AT BLIVE VIST?
  if ($name=="1") {
  echo '<font face="verdana" size="1">' . substr($piccy[$l],6) . '</font>';}
  echo '</td>';
  echo"\n";}
  echo '</tr></table></div>';}
  echo '<br><br><br><div align="center"><font face="verdana" size="1"></a></font></div></body></html>';
?>

Mvh
David

Dette er en hastesag da jeg skal bruge det snart !
så derfor er der 200 points
Avatar billede fojensen Nybegynder
26. oktober 2004 - 23:50 #1
Hej !

du kan bruge denne funktion til at generere thumbnails og gemme dem i en undermappe "thumbnails" som kun bruges til thumbnails. Disse thumbnails overskriver hele tiden hinanden, så mappens indhold vosker ikke med tiden...

---- kode til funktion ----
function imageresizejpeg($sourcefile,$maxwidth,$maxheight,$destinationfile)
{

  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);
        }
    @imagedestroy($img_src);
    return true;
    }
    else
    {
    return false;
    }
}
---- /kode til funktion ----

---- kode med funktionskald, utetset ----
  // VISER THUMBNAILS
  $thumbnail_mappe = "thumbnails/";
  $filename = $thumbnail_mappe . "thumbnail_" . $l . ".jpg";
  imageresizejpeg($piccy[$l],224,168,$filename) ;
  echo '<img src="'.$filename.'" alt="'.$filename.'" border=0 width="224" height="168"></a><br><br>';
  // OM NAVNET ER SAT TIL AT BLIVE VIST?
---- /kode med funktionskald ----

håber det kan bruges
Avatar billede fojensen Nybegynder
26. oktober 2004 - 23:53 #2
det skal retfærdigvis nævnes, at dele af ovennævnte kode har været omtalt her på eksperten tidligere, og det er der jeg har noget af det fra...

mvh Folmer
Avatar billede kumutzu Nybegynder
27. oktober 2004 - 10:27 #3
Hej
Kan du indsætte det i koden, da jeg  ikke er super til PHP ?
Den nederste virker ikke.

Mvh
David
Avatar billede fojensen Nybegynder
27. oktober 2004 - 12:02 #4
funktionen kopierer du ind lige efter indgangsbønnen " <? "

hvis det ikke virker har jeg brug for at kende fejlmeddelelsen der kommer...

mvh. Folmer
Avatar billede fojensen Nybegynder
28. oktober 2004 - 01:34 #5
færdigt script.
det forudsætter at du opretter en undermappe der hedder "thumbnails" (navn kan evt. ændres i en af de øverste linier).

scriptet laver kun rigtige thumbnails ud af jpg-filer, andre billedfiler bruges som de er, men jeg gætter på at 99% er jpg, og de øvrige er oftest små gif-filer.

Der findes også resize-muligheder for eksempelvis png-filer, men jeg vil lige høre om behovet først...

----script----
<?
// DEFINEREDE VARIABLERNE:

// Thumbnails max størrelse
$maxwidth = 224;
$maxheight = 168;

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

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

// BAGGRUNDSFARVE
$bg='white';

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

### --- 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>GYMFEST OG FREDAGSCAFÉ BILLEDER " . $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> Gymfest billeder</title>';
echo '<head>';
echo "<body bgcolor=" . $bg . ">";
echo '<div align="center"><font face="verdana" size="1">' . $pagetitle . '</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
  $thumbnail_mappe = $thumbnail_mappe . "/"; // vi sætter en skråstreg efter undermappens navn
  $thumb_name = $thumbnail_mappe . "thumbnail_" . $l . ".jpg";
  if (eregi("(\.jpg|\.JPG)$", $piccy[$l])) { // hvis filtype er jpg
  imageresizejpeg($piccy[$l],$maxwidth,$maxheight,$thumb_name) ;
  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>';
?>
----script----
håber du får det til at køre...
mvh. Folmer
Avatar billede kumutzu Nybegynder
28. oktober 2004 - 08:57 #6
Hej
Hvad skal der være i mappen "thumbnails" ?
Og mine billed filer hvor skal de ligge henne af ?
Mine billede filer er alle .jpg, så det er dejligt.
Mine filer hedder f.eks. DSC01506.JPG eller DSC01507.JPG, skal de hedde noget specielt ?
Størrelsen er 640x480, den bliver gjordt mindre i thumbnailen eller ?
Avatar billede kumutzu Nybegynder
28. oktober 2004 - 09:07 #7
Der kommer en masse fejl
Her er de fejl den kommer med
http://www.gymfest.dk/testdir/index.php
Avatar billede fojensen Nybegynder
28. oktober 2004 - 17:16 #8
Ja det har jeg måske ikke helt forklaret godt nok...

scriptet skal du placere i mappen sammen med billederne...
undermappen "thumbnails" vil scriptet bruge til at placere de thumbnails i, som scriptet producerer, hvis scriptet producerer 20 thumbnails vil der bagefter ligge filerne thumbnail_0.jpg, thumbnail_1.jpg, thumbnail_2.jpg osv. op til 20.

næste gang scriptet kører vil det overskrive de eksisterende 20 thumbnails osv.

Ang. fejlmeddelelsen handler det om at scriptet ikke kan finde de thumbnails der liger er produceret, sikkert fordi der er noget galt med placering i forhold til mapper osv...

håber det hører nu.
Avatar billede kumutzu Nybegynder
28. oktober 2004 - 17:43 #9
Har gjort som du har sagt men det virker ikke :( jeg lægger en .zip fil ud til dl på:
Avatar billede kumutzu Nybegynder
28. oktober 2004 - 17:43 #10
Avatar billede kumutzu Nybegynder
28. oktober 2004 - 20:12 #11
Sorry forkert adresse. Her er den rigtige adresse, der kan du se hvordan jeg har gjordt...
http://www.gymfest.dk/DL/dl.zip

Mvh David
Avatar billede fojensen Nybegynder
29. oktober 2004 - 01:57 #12
undskyld den lange svartid... men jeg er på arbejde nu...

jeg tror jeg fandt fejlen i line 140 og 141 - de skal rettes til:
  $thumbnail_mappe = $thumb_mappe . "/"; // vi sætter en skråstreg efter undermappens navn
  $thumb_name = $thumb_mappe . "thumbnail_" . $l . ".jpg";

undskyld fejlen...

Jeg kan i øvrigt se på din testside at der står ----script---- i øverste venstre hjørne - det var var noget jeg skrev evd script-start og slut, og ikke noget der skulle have været med ind i koden.
mvh Folmer
Avatar billede fojensen Nybegynder
29. oktober 2004 - 02:08 #13
hvis du har filerne lagt op på en ikke-windowsserver skal du måske også være opmærksom på rettigheder til at oprette filer i mappen - har dog ikke så meget erfaring med det, da jeg selv ligger på en windowsserver.
Avatar billede fojensen Nybegynder
29. oktober 2004 - 04:54 #14
se bort fra det jeg skrev tidligere om line 140 og 141 - de skal selvfølgelig rettes til:
  $thumb_mappe = $thumbnail_mappe . "/"; // vi sætter en skråstreg efter undermappens navn
  $thumb_name = $thumb_mappe . "thumbnail_" . $l . ".jpg";

undskyld, det er jo midt om natten, så man tænker ikke helt klart...
men stadigvæk - undersøg om der er rettigheder til at oprette filer i mappen thumbnails.
Avatar billede kumutzu Nybegynder
29. oktober 2004 - 17:08 #15
Det virker stadigvæk ikke.
Og det er en Windows server det kører på, kan du ikke prøve at tjekke det på din server ?

Mvh
David
Avatar billede fojensen Nybegynder
29. oktober 2004 - 19:37 #16
Jeg har skam allerede testet scriptet på min windowsserver - http://vindehelsinge.dk/test/tumbnail_billedet.php - og det kører fint. du kan også se at thumbnails bliver lagt i mappen 'thumbnails'.

Fejlmeddelelsen på http://www.gymfest.dk/testdir/index.php siger jo at den ikke kunne kopiere thumbnail'en til mappen thumbnails - er mappen thumbnails oprettet, eller kan der være andet på din server der forhindrer
Avatar billede fojensen Nybegynder
29. oktober 2004 - 19:52 #17
forklaringen ligger i antallet af billeder i mappen, der er simpelthen et time-out der udløber inden scriptet er kørt færdigt - se den nederste fejlmeddelse.
prøv evt. om du kan ændre på antallet af filer og mapper...
Avatar billede fojensen Nybegynder
29. oktober 2004 - 22:00 #18
vi bearbejder lige scriptet lidt for at undgå disse timeouts.

linie 139 - 155 rettes til:
  // 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?

hvis filer hedder f.eks. DSC01506.JPG kommer thumbnails nu til at hedde thumbnails/thumbnail_DSC01506.JPG, og nu tjekker vi på om thumbnail findes i forvejen, så resize kun kører hvis der er kommet et billede nyt billede, hvor der endnu ikke findes thumbnail, derved sparer vi en del af procestiden.

jeg har lige testet det på en fil med 103 billeder i størrelse 640x480.
test det på din server...

der hvor mine tests optræder anderledes end dine, er, at hvis den når timeout, så har den produceret de første 54 thumbs, og det ser det ikke ud til at scriptet gør hos dig, fordi det måske ikke kan kopiere til mappen thumbnails.
Avatar billede kumutzu Nybegynder
31. oktober 2004 - 19:13 #19
Kan du ikke lægge en DL fil op på din server, altås en med script, et par billeder, og mappen thumbnails i ?
For ved ikke om det er mig der er en spasser eller min server, for det virker ikke, hverken den timeout eller med at billederne er små.
Jeg skulle have rettigheder til det, da det er en Windows server.
Og jeg har skrevet en mail til dem hvor de siger jeg har rettigheder til det
Avatar billede fojensen Nybegynder
31. oktober 2004 - 21:17 #20
> ved ikke om det er mig der er en spasser eller min server - jeg tror det er serveren...
men her er en mappe der er zip'et indeholdende 6 billeder og scriptet "tumbnail_billedet.php", derudover mapper undermappen "thumbnails" hvori der er et af thumbnails'ene i i forvejen.

det er testet på min server inden det blev zip'et, og ligger på nu http://vindehelsinge.dk/test/test.zip (vil senere blive slettet igen).

prøv engang
Folmer
Avatar billede fojensen Nybegynder
31. oktober 2004 - 21:19 #21
rettelse, adressen var http://vindehelsinge.dk/test/Test.zip - der er nok forskel på store og små bogstaver.
Avatar billede kumutzu Nybegynder
01. november 2004 - 21:32 #22
Det er højst sandsynlig min server DL fil du har lagt ud virker heller ikke.
Men tak for hjælpen
Du får pointsne nu
Avatar billede fojensen Nybegynder
01. november 2004 - 21:51 #23
Jeg synes det er ærgreligt at det ikke virker på din server.
Men tak alligevel for points...
mvh Folmer
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