Avatar billede fixbabe Nybegynder
17. maj 2007 - 15:24 Der er 10 kommentarer og
1 løsning

Skalering/resize af to billeder

Jeg søger en funktion der kan skalere/resize et billede ned til to forskellige størelser.

Det Llille billede skal skaleres ned til 150*120 px og alm billede skal skaleres ned til at være 500 px i breden. Lille billede skal gemmes i /filer/thumb/ og alm billede i /filer/ filerne skal have samme navn.

Sådan her ser mit overlay script ud:

$sti_ImgBack = "filer/mitbillede.jpg";
$sti_ImgIcon = "lay.png";
 
$imgBack = imagecreatefromjpeg($sti_ImgBack);
ImageAlphaBlending($imgBack, true);
$imgIcon = imagecreatefrompng($sti_ImgIcon);

$imgX = imagesx($imgIcon);
$imgY = imagesy($imgIcon);

$backX = imagesx($imgBack);
$backY = imagesy($imgBack);

imagecopy($imgBack, $imgIcon, (0), ($backY-$imgY), 0, 0, $imgX, $imgY);

ImageJpeg($imgBack, $sti_ImgBack, 100);
imagedestroy($imgBack);
imagedestroy($imgIcon);

Jeg ved ikke helt hvad der vil give det bedste resultat at smide overlay på før eller efter billederne er skaleret/resized !?
Avatar billede jakobdo Ekspert
17. maj 2007 - 18:34 #1
Prøv at se på denne funktion:

function resize( $filename, $newfilename, $maxw, $maxh )
{
    $srcim = imagecreatefromjpeg( $filename );
    $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 );
    imagejpeg( $dstim, $newfilename, 85 );
    imagedestroy( $dstim );
    imagedestroy( $srcim );
    return file_exists($newfilename);
}

Den kan resize jpeg billeder.
Avatar billede fixbabe Nybegynder
17. maj 2007 - 18:57 #2
Jeg fandt noget lign.

function resize($pic2,$thumb) {
    $size = getimagesize($pic2);

    $new_width = 150;    //Gør billede width 20% mindre
    $new_height = 120;    //Gør billede height 20% mindre

    $pic2_1 = imagecreatefromjpeg($pic2);
    $dest = imagecreatetruecolor($new_width, $new_height);

    imagecopyresampled($dest, $pic2_1, 0, 0, 0, 0, $new_width, $new_height, $size[0], $size[1]);
    imagejpeg($dest,$thumb);
}

Det virker også som det skal, eller næsten. Det virker ved et billede på 640*480 men ved et billede på 480*640 så "maser" den billedet istedet for at bevare breden på 500 px.
Avatar billede jakobdo Ekspert
17. maj 2007 - 19:40 #3
Hvis du vil tvinge til en størrelse, så skal du rette i koden her:
$wscale = $maxw / $ow;
    $hscale = $maxh / $oh;
    $scale = ( $hscale < $wscale ? $hscale : $wscale );
    $nw = round( $ow * $scale, 0 );
    $nh = round( $oh * $scale, 0 );
Avatar billede fixbabe Nybegynder
17. maj 2007 - 21:57 #4
En kort forklaring på det du har skrevet?
Avatar billede jakobdo Ekspert
17. maj 2007 - 22:04 #5
Ahh, du må lige regne lidt selv.
Det er ren matematik. :o)
Avatar billede fixbabe Nybegynder
27. maj 2007 - 17:12 #6
Du kan ikke hjælpe mig med at få det sat ind i min funktion ovenover? jeg kan ikke få det til at virke. Den skulle gerne lave billederne uanset størrelse til at være 500 px i breden
Avatar billede jakobdo Ekspert
27. maj 2007 - 23:52 #7
Jo, det skulle jeg nok kunne.
Må lige kigge på det i morgen.
Avatar billede jakobdo Ekspert
28. maj 2007 - 11:45 #8
Så kan du bruge denne funktion:

function resize($filename, $newfilename, $maxw)
{
    $srcim = imagecreatefromjpeg( $filename );
    $ow = imagesx( $srcim );
    $oh = imagesy( $srcim );
    $scale = $maxw / $ow;
    $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 );
    imagejpeg( $dstim, $newfilename, 85 );
    imagedestroy( $dstim );
    imagedestroy( $srcim );
    return file_exists($newfilename);
}

Hvis du kalder den med:

resize('billede.jpg','resized.jpg',500);

Så vil du have et billede, som altid er 500px bredt.
Avatar billede fixbabe Nybegynder
28. maj 2007 - 12:08 #9
Ah :) Jeg skal nok til at læse lidt mere på funktioner kan jeg se. Tusind tak smid et svar
Avatar billede jakobdo Ekspert
28. maj 2007 - 12:42 #10
Svar!
Avatar billede jakobdo Ekspert
28. maj 2007 - 13:20 #11
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