Avatar billede danic Nybegynder
31. juli 2002 - 09:07 Der er 38 kommentarer og
3 løsninger

Billede galleri

Jeg er ved at lave et billede galleri til familien,

Jeg læste http://www.eksperten.dk/spm/241232 og der er noget der kan bruges der.

Jeg har lavet lidt kode på http://www.amagerfoto.dk

Men hvordan generere jeg automatisk en thumbnail over hvert filnavn i mapperne?
Avatar billede ghazaleh Nybegynder
31. juli 2002 - 09:16 #1
Du vil have en thunpnail hver gang du har et billede?

Du kan lave 2 billeder af hvert billede i photoshop - en thumpnail og et image. Og photoshop kan selv gøre det automatisk, så det er ligemeget om der er 1000 billeder
Avatar billede danic Nybegynder
31. juli 2002 - 09:21 #2
respekten> Det skal være muligt selv at uploade et billede via sin browser, når brugeren har uploadet billedet, bliver det placeret i en mappe. Når mappen åbnes skal der automatisk generes en thumbnail, hvis altså denne ikke findes (altså første gang en bruger loader siden).
Avatar billede fangel Nybegynder
31. juli 2002 - 10:00 #3
hmm... den er sjov...

Man skal i hvert fald have GDLib installeret... har du det?
Avatar billede tipsen Nybegynder
31. juli 2002 - 10:15 #4
-vil det ikke være smartest at generere thumbnailen i forb. med håndtering af det uploadede billede?
Avatar billede Noone Nybegynder
31. juli 2002 - 10:17 #5
Denne her kode kan bruges til det.
--------------------------thumbs.php------------------------------
<?php

foreach ($argv as $val) {
    $imagefile .= $val." ";
}

$imagefile = trim($imagefile);

$imageinfo = getimagesize("pics/$imagefile");

if ($imageinfo[2] == 2) {
    header("Content-Type: image/jpeg");
    $makemesmall = imagecreatefromjpeg("pics/$imagefile");

    if (ImageSX($makemesmall) > ImageSY($makemesmall)) {
        $thumbed = imagecreate(100,75);
        $white = imagecolorresolve($thumbed,0,0,255);
        imagefill($thumbed,0,0,$white);
        imagecopyresized($thumbed,$makemesmall,0,0,0,0,101,76,ImageSX($makemesmall),ImageSY($makemesmall));
    }
    elseif (ImageSX($makemesmall) < ImageSY($makemesmall)) {
        $thumbed = imagecreate(75,100);
        $white = imagecolorresolve($thumbed,0,0,255);
        imagefill($thumbed,0,0,$white);
        imagecopyresized($thumbed,$makemesmall,0,0,0,0,76,101,ImageSX($makemesmall),ImageSY($makemesmall));
    }
    elseif (ImageSX($makemesmall) == ImageSY($makemesmall)) {
        $thumbed = imagecreate(100,100);
        $white = imagecolorresolve($thumbed,0,0,255);
        imagefill($thumbed,0,0,$white);
        imagecopyresized($thumbed,$makemesmall,0,0,0,0,101,101,ImageSX($makemesmall),ImageSY($makemesmall));
    }

    imagejpeg($thumbed,"./thumbs/$imagefile");
    $file = fopen("./thumbs/$imagefile","r");
    fpassthru($file); 
}
elseif ($imageinfo[3] == 3) {
    $im = imagecreatefrompng("pics/$imagefile");
   
    header("Content-Type: image/png");
   
    $makemesmall = imagecreatefrompng("pics/$imagefile");

    if (ImageSX($makemesmall) > ImageSY($makemesmall)) {
        $thumbed = imagecreate(100,75);
        $white = imagecolorresolve($thumbed,0,0,255);
        imagefill($thumbed,0,0,$white);
        imagecopyresized($thumbed,$makemesmall,0,0,0,0,101,76,ImageSX($makemesmall),ImageSY($makemesmall));
    }
    elseif (ImageSX($makemesmall) < ImageSY($makemesmall)) {
        $thumbed = imagecreate(75,100);
        $white = imagecolorresolve($thumbed,0,0,255);
        imagefill($thumbed,0,0,$white);
        imagecopyresized($thumbed,$makemesmall,0,0,0,0,76,101,ImageSX($makemesmall),ImageSY($makemesmall));
    }
    elseif (ImageSX($makemesmall) == ImageSY($makemesmall)) {
        $thumbed = imagecreate(100,100);
        $white = imagecolorresolve($thumbed,0,0,255);
        imagefill($thumbed,0,0,$white);
        imagecopyresized($thumbed,$makemesmall,0,0,0,0,101,101,ImageSX($makemesmall),ImageSY($makemesmall));
    }
    imagepng($im,"thumbs/$imagefile");
    $file = fopen("thumbs/$imagefile","r");
    fpassthru($file); 
}

?>
--------------------------thumbs.php------------------------------

Noget i den stil..
Avatar billede Noone Nybegynder
31. juli 2002 - 10:17 #6
tipsen > Jo...
Avatar billede tipsen Nybegynder
31. juli 2002 - 10:18 #7
Avatar billede The Real Yoda Juniormester
31. juli 2002 - 10:19 #8
erhm... findes der er en GRATIS udgave GDLIB til windows servere ?
Avatar billede Noone Nybegynder
31. juli 2002 - 10:34 #9
therealyoda > Den følger med i den zip fil der kan hentes fra www.dk.php.net
Avatar billede mixeren Nybegynder
31. juli 2002 - 10:38 #10
Ved ikke om der findes en gratis version af det, men alternativ kan du bruge http://www.imagemagick.org/ den findes også til windows og den kan alt hvad du har brug for (og meget mere) den skulle efter sigende også lave meget bedre thumbs end GD. (Har dog kun erfaringer med imagemagick)

Den er drøn nem at bruge:
exec ("$sti_til_convert"." -geometry 450 -quality 80 "."sti/til/uploadet_pic/$filnavn"." "."sti/til/stor_pic/$filnavn");

$stil_til_convert er der hvor programmet er installeret.
-geometry 450 laver billedet 450 px bred. Og tilpasser højden automatisk
-quality 80 Er komprimeringsgraden

Jeg har lavet et lille simpelt script, som uploader og med to linjer som ovenstående opretter to kopier en til visning og en til thumb også lige en linje som slettet orginalen.
Avatar billede Noone Nybegynder
31. juli 2002 - 11:02 #11
mixeren > Hvis der er meget belastning på upload systemet vil jeg tro at gd vil give bedre performance. Og GD2 kan også lave truecolor, og jeg mener også den bruger resample, og altså giver bedre thumbs.
Avatar billede mixeren Nybegynder
31. juli 2002 - 11:12 #12
chanoa> Du helt sikkert ret mht. belastningen, imagemagick er ret recourcekrævende, men jeg syntes nu den laver nogel ganske gode billeder,
http://www.gandrup-vendelbo.com/foto/sommerhus_uge_17/index.php?show=image/pic25.jpg (stammer fra et 1.3 mill px. digital kamera, har kun været gennem imagemagick)

Som sagt har jeg ingen praktisk erfaring med GD, man har du evt link hvor man kan se kvaliteten af GD2's arbejde?
Avatar billede fangel Nybegynder
31. juli 2002 - 11:23 #13
chanoa => jeg har hentet denne ZIP fil fra php.net... der er også en fil der hedder gd_[noget].dll i min PHP/dlls mappe.. men jeg kan ikke bruge nogle af GD's funktioner... har du noget mod at hjælpe mig?
/Dea_PG
Avatar billede Noone Nybegynder
31. juli 2002 - 11:23 #14
mixeren > Desværre ser det ikke ud til at der er samples på http://www.boutell.com/gd/ men du kan jo hente det ned og afprøve det selv, hvis du har tid og lyst ;)
Avatar billede Noone Nybegynder
31. juli 2002 - 11:26 #15
dea_pg > Kig i din php.ini, der står nogle linjer med "Extension" find den linje med gd_noget.dll og fjern det # der står forrest.. Har ikke lige en php.ini fra en standart windows zip i nærheden, har kun en fra source distributionen.
Avatar billede mixeren Nybegynder
31. juli 2002 - 12:37 #16
chanoa> Lyst til at prøve noget nyt, ja det har man altid.. mere tiden det kniber med. :-)
Avatar billede fangel Nybegynder
31. juli 2002 - 12:43 #17
chanoa =>ok... tak, jeg vil lede lidt i min php.ini fil...
Avatar billede Noone Nybegynder
31. juli 2002 - 12:44 #18
mixeren > Tror jeg opgradere til GD2 senere og retter mine scripts til at udnytte truecolor og resample istedet for 256 colors og resize, senere idag, så kan jeg jo lave en sammenligning mellem GD om imagemagick også.
Avatar billede mixeren Nybegynder
31. juli 2002 - 12:48 #19
chanoa>Jeg vil meget gerne se en sammenligning.. :-)
Avatar billede Noone Nybegynder
31. juli 2002 - 12:56 #20
Laver en senere så, hvis ikke det går galt med opgraderingen.
Avatar billede sukos Juniormester
31. juli 2002 - 16:07 #21
dea_pg--> hvis du har hentet zip'en til windows, så er det nok dll'en, php_gd.dll (ligger i "extensions"-mappen) du skal kopiere over i din win-mappe, kikke efter ;extension=php_gd.dll i php.ini, udkommentere den, restarte din server og du er kørende! :O)
Avatar billede danic Nybegynder
31. juli 2002 - 18:04 #22
chanoa> hvad er det er sker her =>

foreach ($argv as $val) {
    $imagefile .= $val." ";

Er det output fra en anden fil?
Avatar billede Noone Nybegynder
31. juli 2002 - 20:24 #23
Nej, den tager commanline input... Jeg kalder selv scriptet sådan her:

thumb.php?filnavn.php output fra scriptet er JPG data, og jeg bruger det så sådan her hvis der ikke findes et thumbnail:

<img src="thumbs.php?filnavn.jpg">
Avatar billede Noone Nybegynder
31. juli 2002 - 20:25 #24
Aner dog ikke hvorfor den bruger et foreach loop, men det havde sikkert noget med den version af PHP at gøre.. Tror jeg brugte 4.0.6 da jeg skrev det.
Avatar billede danic Nybegynder
31. juli 2002 - 21:23 #25
jeg har lagt filen thumbs.php og et test-billede test.jpg sammen, i et tomt katalog, herefter har jeg oprettet underkatalogerne katalogerne pics og thumbs.

Hvis jeg køre thumbs.php?test.jpg i min browser sker der intet, skulle den ikke lave en thumbs fil med navnet test.jpg i thumbs kataloget
Avatar billede Noone Nybegynder
31. juli 2002 - 21:38 #26
Har du skriverettigheder til thumbs kataloget?
Avatar billede Noone Nybegynder
31. juli 2002 - 21:42 #27
Har lige smidt en sammenligning af GBLib, GDLib2 og Imagemagick op på hhttp://www.mrfunny.yi.org/ekspert/imgtest/test.html For dem der var interesseret....
Avatar billede mixeren Nybegynder
01. august 2002 - 01:16 #28
chanoa> Dejlig med en sammenligning, det er værd at bemærke at GDLib er meget dårlig, som jeg altid havde hørt og derfor valgte imagemagick.

Men vigtigst at der praktisk talt ingen forskel er på GDLib2 og Imagemagick mht. kvaliteten. GDLib2 billedet er endda 7 kb mindre.

Hvad så med hastigheden?
Avatar billede Noone Nybegynder
01. august 2002 - 01:19 #29
Den er nogenlunde det samme... Jeg konverterede GDLib2 billedet med et PHP script, og måtte vente en 15-20 sek (Men hvis du har kigget på originalen er det jo til at forstå ;) ), converteringen med imagemagick tog ca. det samme, holdt dog ikke øje med det, da jeg lavede det fra en shell..
Avatar billede Noone Nybegynder
01. august 2002 - 01:26 #30
[chano@mufasa photo_gallery]$ time convert -resize 100x75! pics/c3.jpg c3.jpg

real    0m6.605s
user    0m5.540s
sys    0m0.220s

Jeg har ikke mulighed for at lave samme måling af PHP scriptet, men du kan jo prøve at tage tid... http://nw.mrfunny.yi.org/photo_gallery/thumb.php?c3.jpg Jeg får det til en 6-7 sek nu... Serveren må ha' været belastet tidligere...
Avatar billede danic Nybegynder
01. august 2002 - 22:15 #31
chanoa> Det virker :) den smider filen ned i henholdvis pics og thumbs :)

Så mangler jeg bare en upload funktion, det skulle ikke være noget problem efter upload af x billeder fra browseren køre jeg thumbs.php?filnavn.jpg med include.

chanoa> ligger du også inde med en view'er til de færdige billeder?
Avatar billede Noone Nybegynder
02. august 2002 - 01:43 #32
Ja da... Alle de inkluderede filer er dele af mit design, og andre måder at gøre det nemt for mig selv på. De er ikke vigtige for at systemet virker.

Det kan ses live på http://www.nikkiwebster.dk/photo_gallery/gallery.php (Med nydelige thumbnails efter opgradering til GD2 og omskrivining af thumbs.php som er posted højere oppe)

Viewere her under arbejder sammen med thumbs.php og undersøger selv om der er en thumb, hvis ikke sættes src på billedet til thumbs.php?filnavn, og hvis der er sættes den til thumbs/filnavn.jpg

Thumbs.php håndtere kun png og jpg, ikke gif, så hvis det er gif skal man bruge imagemagick, eller lave dem manuelt.

Smider også lige den nye version af thumbs.php

--------------------------Gallery.php----------------------------------
<?php

include("../functions.php");
if ($page == "") {
    $page = "1";
}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<link rel=stylesheet type="text/css" href="../layout.css">
<link rel="stylesheet" type="text/css" href="../menu.css">
<TITLE> NikkiWebster.DK -> Photo Gallery Page <?php echo $page; ?> </TITLE>
</HEAD>

<BODY bgcolor="#000000" text="#FFFFFF" link="#FFFFFF" vlink="#FFFFFF">

<?php include("../menu.php"); ?>

<h1><center><?php makeheadline("Nikki Webster Photo Gallery"); ?></center></h1>

<?php
echo "Page: ".$page."<br>\n";

$dircont = opendir("./pics");



while ($file = readdir($dircont)) {
    if (is_file("./pics/$file") && $file != "index.html") {
        if ($bitbucket = GetImageSize("./pics/$file")) {
            $filenames .= "$file;";
        }
        else {
            echo "Offending file: $file<br>\n";
        }   
    }
   
}

$filearray = explode(";",$filenames);
natcasesort($filearray);

$imagesshown = 0;
$imagespassed = 1;
$imagesonpage = 20;
$imagesinrow = 5;

$go = "false";

echo "Total Number of Pictures: ".count($filearray)."<br>\n";

if (((($page-1)*$imagesonpage)+$imagesonpage) < count($filearray)) {
    $lastimage = ((($page-1)*$imagesonpage)+$imagesonpage);
}
else {
    $lastimage = count($filearray);
}

echo "Showing Pictures: ".((($page-1)*$imagesonpage)+1)."-".$lastimage."<br>\n";

echo "<table border=\"3\" style=\"border-color: #FFFFFF;\" align=\"center\"><tr>";

foreach ($filearray as $value) {

    if ($page == "1") {
        $go = "true";
    }
   
    if ($imagespassed == (($page-1)*$imagesonpage)) {
        $go = "true";
    }
    else {
        $imagespassed++;
    }

    if ($go == "true" && trim($value) != "") {
        $size = getimagesize("pics/$value");

        if (strlen($value) > 11) {
            $leng = 0;
            $value_short = "";
            while ($leng < 11) {
                $value_short .= $value[$leng];
                $leng++;
            }
            $value_short .= "...";
        }
        else {
            $value_short = $value;
        }

        if (file_exists("thumbs/$value")) {
            $size = getimagesize("thumbs/$value");
            echo "<td valign=\"bottom\" align=\"center\" bgcolor=\"#000000\"><a href=\"showpic.php?image=".rawurlencode($value)."\"><img src=\"thumbs/".rawurlencode($value)."\" {$size[3]} alt=\"$value_short\" border=\"0\"><br>$value_short</td>";
        }
        else {
            echo "<td valign=\"bottom\" border=\"0\" align=\"center\" bgcolor=\"#000000\"><a href=\"showpic.php?image=".rawurlencode($value)."\"><img src=\"thumb.php?".urlencode($value)."\" alt=\"$value_short\" border=\"0\"><br>$value_short</td>";
        }
       
        $imagesshown++;
    }
   
    if ($imagesshown/$imagesinrow == round($imagesshown/$imagesinrow) && file_exists("pics/$value") && $go == "true") {
        echo "</tr>\n<tr>";
    }
   

    if ($imagesshown == $imagesonpage) {
        break;
    }

}

echo "</tr></table>\n";

$pages = 0;

while ($pages < ceil((count($filearray)-1)/$imagesonpage)) {

    if ($pages+1 == $page) {
        $pagelist .= "<b>".($pages+1)."</b> | "; 
    }
   
    else {
        $pagelist .= "<a href=\"$PHP_SELF?page=".($pages+1)."\">".($pages+1)."</a> | ";
    }
   
    $pages++;

}

echo "<br><center>Page: ".substr($pagelist,0,-3)."</center>\n";
include("../counter/counter.php");
?>

</BODY>
</HTML>
----------------------------Gallery.php---------------------------------

-----------------------------Thumbs.php---------------------------------
<?php

foreach ($argv as $val) {
    $imagefile .= $val." ";
}

$imagefile = trim($imagefile);

$imageinfo = getimagesize("pics/$imagefile");

if ($imageinfo[2] == 2) {
    header("Content-Type: image/jpeg");
    $makemesmall = imagecreatefromjpeg("pics/$imagefile");

    if (ImageSX($makemesmall) > ImageSY($makemesmall)) {
        $thumbed = imagecreatetruecolor(100,75);
        $white = imagecolorresolve($thumbed,0,0,255);
        imagefill($thumbed,0,0,$white);
        imagecopyresampled($thumbed,$makemesmall,0,0,0,0,101,76,ImageSX($makemesmall),ImageSY($makemesmall));
    }
    elseif (ImageSX($makemesmall) < ImageSY($makemesmall)) {
        $thumbed = imagecreatetruecolor(75,100);
        $white = imagecolorresolve($thumbed,0,0,255);
        imagefill($thumbed,0,0,$white);
        imagecopyresampled($thumbed,$makemesmall,0,0,0,0,76,101,ImageSX($makemesmall),ImageSY($makemesmall));
    }
    elseif (ImageSX($makemesmall) == ImageSY($makemesmall)) {
        $thumbed = imagecreatetruecolor(100,100);
        $white = imagecolorresolve($thumbed,0,0,255);
        imagefill($thumbed,0,0,$white);
        imagecopyresampled($thumbed,$makemesmall,0,0,0,0,101,101,ImageSX($makemesmall),ImageSY($makemesmall));
    }

    imagejpeg($thumbed,"./thumbs/$imagefile");
    $file = fopen("./thumbs/$imagefile","r");
    fpassthru($file); 
}
elseif ($imageinfo[3] == 3) {
    $im = imagecreatefrompng("pics/$imagefile");
   
    header("Content-Type: image/png");
   
    $makemesmall = imagecreatefrompng("pics/$imagefile");

    if (ImageSX($makemesmall) > ImageSY($makemesmall)) {
        $thumbed = imagecreatetruecolor(100,75);
        $white = imagecolorresolve($thumbed,0,0,255);
        imagefill($thumbed,0,0,$white);
        imagecopyresampled($thumbed,$makemesmall,0,0,0,0,101,76,ImageSX($makemesmall),ImageSY($makemesmall));
    }
    elseif (ImageSX($makemesmall) < ImageSY($makemesmall)) {
        $thumbed = imagecreatetruecolor(75,100);
        $white = imagecolorresolve($thumbed,0,0,255);
        imagefill($thumbed,0,0,$white);
        imagecopyresampled($thumbed,$makemesmall,0,0,0,0,76,101,ImageSX($makemesmall),ImageSY($makemesmall));
    }
    elseif (ImageSX($makemesmall) == ImageSY($makemesmall)) {
        $thumbed = imagecreatetruecolor(100,100);
        $white = imagecolorresolve($thumbed,0,0,255);
        imagefill($thumbed,0,0,$white);
        imagecopyresampled($thumbed,$makemesmall,0,0,0,0,101,101,ImageSX($makemesmall),ImageSY($makemesmall));
    }
    imagepng($im,"thumbs/$imagefile");
    $file = fopen("thumbs/$imagefile","r");
    fpassthru($file); 
}

?>
-----------------------------Thumbs.php---------------------------------

Men måske du har mere brug for noget som http://photos.nikkiwebster.dk/ ?
Avatar billede danic Nybegynder
02. august 2002 - 08:46 #33
chanoa> Ja det er rent faktisk sådan et system som du har på http://photos.nikkiwebster.dk/ jeg har brug for!

Det skal bruges til et beskyttet famillie album hvor katagorierne skal være begivenhedder føselsdag, dåb, bryllup m.m. Famillie medlem'er skal have mulighed for at kunne uploade digitale billeder fra en begivenhed. Så andre kan se dem.

Jeg kan e.v.t sende dig et par flasker god rødvin, hvis jeg må bruge det!

email: danic@danic.dk
Avatar billede Noone Nybegynder
02. august 2002 - 13:32 #34
danic > Det er ikke tilladt at udlove andet end point på eksperten, og desuden kan jeg ikke li' vin ;)

Men jeg kan godt lige pakke ned i en tarball (En tar.gz fil) til dig.. Det er skrevet til min egen server der kører linux, og hvor jeg kan knofigurer den som det passer mig, og bruger der for en del tricks der måske ikke kan benyttes på et webhotel. Så det kan godt være det ikke virker...
Avatar billede danic Nybegynder
02. august 2002 - 14:05 #35
chanoa> du meget gerne pakke det sammen til mig, m.h.t webhotel'et skulle det ikke være det store problem, da jeg kender ham der hoster mit domain.

Du må også gerne poste et svar så du kan få nogle points.
Avatar billede Noone Nybegynder
02. august 2002 - 14:53 #36
Du kan finde det på http://www.mrfunny.yi.org/eksperten/photos.nw.dk.tar.gz ALLE filer har unix style linebreaks, så hvis du åbner dem i windows notepad, ser det underligt ud ;)

Der er en readme.txt fil med instruktioner i pakken, og du kan pakke den ud med winzip eller winrar hvis du bruger windows... Ellers er der gode gamle tar, hvis du bruger unix.

Have fun.
Avatar billede Noone Nybegynder
02. august 2002 - 14:54 #37
Skulle der blive problemer kan du jo lige prøve at kontakte mig på chano@mrfunny.yi.org det kunne jo være en lille bug, som jeg er sikker på der er flere af... F.eks. kan det ikke lide % i fil navnet... SLET ikke hvis det er %20... Det går helt galt ;)
Avatar billede danic Nybegynder
02. august 2002 - 15:01 #38
hmm.. jeg får en 'The page cannot be found' til ovenståne link til filen?
Avatar billede Noone Nybegynder
02. august 2002 - 15:57 #39
Hmmm...... Checkker lige så... http://www.mrfunny.yi.org/ekspert/photos.nw.dk.tar.gz Husk mig lige på at checkke mine links næste gang ;)
Avatar billede danic Nybegynder
03. august 2002 - 10:36 #40
Jeg accepter chanoa's svar! (da han ikke er interseret i points)
Avatar billede analucius Nybegynder
18. oktober 2002 - 12:50 #41
Kig på http://gallery.menalto.com/
Det er et PHP værktøj der kan alt hvad der efterspørges i et billedgallery. Sejt produkt - men til gengæld gratis!!!
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