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 !?
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
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.
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.
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 );
En kort forklaring på det du har skrevet?
Ahh, du må lige regne lidt selv. Det er ren matematik. :o)
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
Jo, det skulle jeg nok kunne. Må lige kigge på det i morgen.
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.
Ah :) Jeg skal nok til at læse lidt mere på funktioner kan jeg se. Tusind tak smid et svar
Vi tilbyder markedets bedste kurser inden for webudvikling