Avatar billede Mik2000 Professor
06. oktober 2006 - 02:23 Der er 5 kommentarer og
1 løsning

Resize image med gdlib farve fejl

Hej

Når jeg bruger denne kode til at resize et billede så laver den det om men den laver helt forkerte farver (tror den nedsætter antallet).

Hvordan undgåes det?

//KODE:
//-------------------------------------------

function resize($bredde_ny, $image, $dest_file) {
list($bredde, $hojde) = getimagesize($image); //Find højden og bredden på det billede jeg vil resize 
$forhold = $hojde/$bredde; //Hvor stor er højden i forhold til bredden? 

//Find den nye højde og bredde 
// $bredde_ny = 100; 
$hojde_ny = round($bredde_ny*$forhold);

//Load/opret billeder
$source = imagecreatefromjpeg($image); 
$destination = imagecreate($bredde_ny, $hojde_ny);

//Resize
imagecopyresized($destination, $source, 0, 0, 0, 0, $bredde_ny, $hojde_ny, $bredde, $hojde);

//Gem
imagejpeg($destination, $dest_file);
chmod($dest_file,0777);

}


resize(500, 'camaro2.jpg', 'ResizedKim.jpg');


//KODE SLUT
//-------------------------------------------
Avatar billede jakobdo Ekspert
06. oktober 2006 - 12:30 #1
Prøv evt at brug: imagecopyresampled() og ikke: imagecopyresized()
Direkte fra php-manualen:
The image will be output at half size, though better quality could be obtained using imagecopyresampled().
Avatar billede Mik2000 Professor
08. oktober 2006 - 14:43 #2
Hej

Det hjalp desværre ikke.

Se resultatet her:

Grundbillede
http://www.zencart.dk/upload/upload/camaro2.jpg
og
Output billede
http://www.zencart.dk/upload/upload/ResizedKim.jpg
Avatar billede jakobdo Ekspert
08. oktober 2006 - 15:07 #3
Prøv denne kode:

<?php
//http://www.eksperten.dk/spm/736899

//http://se.php.net/imagecreatefromjpeg
function LoadJpeg($imgname)
{
    $im = @imagecreatefromjpeg($imgname); /* Attempt to open */
    if (!$im) { /* See if it failed */
        $im  = imagecreatetruecolor(150, 30); /* Create a black image */
        $bgc = imagecolorallocate($im, 255, 255, 255);
        $tc  = imagecolorallocate($im, 0, 0, 0);
        imagefilledrectangle($im, 0, 0, 150, 30, $bgc);
        /* Output an errmsg */
        imagestring($im, 1, 5, 5, "Error loading $imgname", $tc);
    }
    return $im;
}

function resize( $srcim, $maxw, $maxh )
{
    $ow = imagesx( $srcim );
    $oh = imagesy( $srcim );
    $wscale = $maxw / $ow;
    $hscale = $maxh / $oh;
    $scale = ( $hscale < $wscale ? $hscale : $wscale );
    $nw = round( $ow * $scale, 0 );
    $nh = round( $oh * $scale, 0 );
    $dstim = imagecreatetruecolor( $nw, $nh );
    imagecopyresampled( $dstim, $srcim, 0, 0, 0, 0, $nw, $nh, $ow, $oh );
    imagedestroy( $srcim );
    return $dstim;
}

$input = 'http://www.zencart.dk/upload/upload/camaro2.jpg';

header("Content-type: image/jpeg");
$imNormal  = LoadJpeg($input);
$imResized = resize($imNormal, 400, 400);
imagejpeg($imResized);
imagedestroy($imResized);

?>

Du kan se eksemplet her: http://www.codebreaker.dk/exp/736899exp.php
Avatar billede Mik2000 Professor
08. oktober 2006 - 20:16 #4
Hej

Fandt fejlen i mit ud fra dit :)

Skulle blot bruge:
imagecreatetruecolor

frem for:
imagecreate

Så point er selvf. dine når du skriver et svar. Endnu engang tak for hjælpen :)
Avatar billede jakobdo Ekspert
08. oktober 2006 - 20:23 #5
Svar!
Avatar billede jakobdo Ekspert
10. oktober 2006 - 17:52 #6
Takker for point.
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