26. oktober 2004 - 20:35Der 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
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) {
---- 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 ----
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
### --- 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
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 ?
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...
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
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.
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.
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
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...
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.
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
> 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.
Jeg synes det er ærgreligt at det ikke virker på din server. Men tak alligevel for points... mvh Folmer
Synes godt om
Ny brugerNybegynder
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.