Avatar billede rane Nybegynder
24. maj 2007 - 11:09 Der er 2 kommentarer og
1 løsning

Select onChange - skift billede

Jeg har en <select> i en form, der viser indholdet af en billedemappe på serveren og når man vælger en fil i dropdownen skal den erstatte et transparent billede på siden med det billede man valgte. Der er både GIF og JPG filer i mappen og filen skal vises så den max. er 200px høj og max 200px bred. Dvs. den skal skaleres propertionelt.

----------

Option-listen ser således ud:

<option value="uploads/Image/billede1.gif">billede1.gif</option>
<option value="uploads/Image/billede2.jpg">billede2.jpg</option>

Min onChange kode ser sådan ud:

<select name="liste" size="12" style="width: 195px;" onChange="document.myImg.src = 'billeder.php?navn='+this.value+'&maxhojde=200&maxbrede=200'"><?= $liste ?></select>

<img name="myImg" src="graphics/transparent.gif" style="border: 1px solid #BFE0FE;" />

Og endelig min billeder.php fil:

Header( "Content-type: image/jpg");

function resizeimage($filnavn, $maxhojde, $maxbredde) {
    //Find højde og bredde på billede
    list($width, $height, $type) = getimagesize($filnavn);
    if (in_array($type, array(IMAGETYPE_JPEG, IMAGETYPE_GIF, IMAGETYPE_PNG))) return FALSE; // hvis ikke-gyldig type!

    if ($height > $maxhojde || $width > $maxbredde) {
        $resizefactor = max($height/$maxhojde, $width/$maxbredde);
        $newheight = $height / $resizefactor;
        $newwidth = $width / $resizefactor;
    }

    //lav et nyt billede
    $image = imagecreate($newwidth, $newheight);

    $white = ImageColorAllocate($image,204,204,204);
    ImageFilledRectangle($image,0,0,$newwidth,$newheight,$white);

    //åben det originale billede
    if ($type == IMAGETYPE_GIF)
        $src = imagecreatefromgif($filnavn);
    else if ($type == IMAGETYPE_PNG)
        $src = imagecreatefrompng($filnavn);
    else
        $src = imagecreatefromjpeg($filnavn);

    //gem billede
    imagecopyresized($image, $src, 0,0,0,0, $newwidth, $newheight, $width, $height);
    ImageJPEG($image);
    ImageDestroy($image); ImageDestroy($src);
}

if(isset($_GET['navn']) && isset($_GET['maxhojde']) && isset($_GET['maxbrede'])){
  resizeimage($_GET['navn'], $_GET['maxhojde'],$_GET['maxbrede']);
}

--------------------------------------

Problemet:
Den udskifter fint SRC adressen i image-tagget, men min phpfil gider kun outputte JPG filer og ikke GIF filerne.

Nogen der kan gennemskue hvorfor?
Avatar billede dkfire Nybegynder
24. maj 2007 - 12:09 #1
ImageJPEG($image) giver jo kun et jpg billede, prøv med imagegif().
Avatar billede rane Nybegynder
24. maj 2007 - 12:28 #2
Outputtet må faktisk godt kun være JPG filer - men den skal kunne tage GIF inputs også..og lave dem om til JPG...hvis den kan det?
Avatar billede rane Nybegynder
25. maj 2007 - 10:33 #3
Nå jeg fandt aldrig rigtig en løsning. Det viser sig at ovenstående script kun virker hvis GIF-filerne i mappen er OVER 200px enten i bredde eller width. Er de mindre end 200px virker det simpelthen ikke.  Så nu har jeg bare valgt at for at kunne uploade filer, skal de mindst være 200px. Problem solved :)
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