Avatar billede sw_red_6 Nybegynder
15. maj 2006 - 16:14 Der er 10 kommentarer og
1 løsning

spørgsmål ang. imagecopyresampled() og imagejpeg()

Er det muligt at lave en funktion hvor man bruger/returnerer f.eks:
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $Bredde, $Hoejde, $width_orig, $height_orig);
// Output
imagejpeg($image_p, null, 100);
Avatar billede jakobdo Ekspert
15. maj 2006 - 17:49 #1
Hvad vil du returnere?
Avatar billede sw_red_6 Nybegynder
15. maj 2006 - 20:02 #2
Jeg vil have mulighed for at vise et thumbnail, men i stedet for at have flere versioner af samme billede ville det være rart hvis det kunne gøres "live". Jeg ved godt at jeg kan sætte højde og bredde på et img-tag men det syntes jeg ikke giver helt det samme resultat, kvalitetsmæssigt altså.
Avatar billede jakobdo Ekspert
15. maj 2006 - 22:07 #3
Du kan godt lave en funktion som laver det on-the-fly.
Du bør kigge på funktionen:

function LoadJpeg($imgname)
{
    $im = @imagecreatefromjpeg($imgname); /* Attempt to open */
    if (!$im)
    {
        /* See if it failed */
        $im  = imagecreate(200, 30); /* Create a blank image */
        $bgc = imagecolorallocate($im, 255, 255, 255);
        $tc  = imagecolorallocate($im, 0, 0, 0);
        imagefilledrectangle($im, 0, 0, 200, 30, $bgc);
        /* Output an errmsg */
        imagestring($im, 5, 5, 5, "Error loading $imgname", $tc);
    }
    return $im;
}

Den kan loade et jpeg ind og så kan du resize billedet on-the-fly.
Vil du prøve lidt selv, eller skal du bare have en færdig kode?
Hvis du vil lege lidt selv, så kan du evt også kigge på denne kode til resize:
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);
}
Avatar billede sw_red_6 Nybegynder
16. maj 2006 - 10:14 #4
jeg lærer nok mest af selv at lege lidt med det i stedet for at få en færdiglavet stump kode, men det kan være jeg skal have lidt hjælp til at få det til at virke.
Avatar billede sw_red_6 Nybegynder
16. maj 2006 - 11:44 #5
hmm jeg har leget lidt med det og har fået lavet noget der burde virke... men det gør det ikke rigtig, du kan se resultatet af funktionen her:
http://enteraction.dk/projekter/test/tekst_2/nyheder_short.php
Selve funktionen:

  function thumbnail($Org_Filnavn, $Thumb_bredde, $Thumb_hoejde) {
    $Billede = @imagecreatefromjpeg($Org_Filnavn);
    if (!$Billede)
    {
        $Billede = imagecreate(200, 30);
        $Baggrund_farve = imagecolorallocate($Billede, 255, 255, 255);
        $Tekstfarve  = imagecolorallocate($Billede, 0, 0, 0);
        imagefilledrectangle($Billede, 0, 0, 200, 30, $Baggrund_farve);

        imagestring($Billede, 5, 5, 5, "Error loading $Org_Filnavn", $Tekstfarve);
    }
    list($Org_bredde, $Org_hoejde) = getimagesize($Org_Filnavn);
    if($Thumb_bredde && ($Org_bredde < $Org_hoejde)) {
      $Thumb_bredde = ($Thumb_hoejde / $Org_hoejde) * $Org_bredde;
    } else {
      $Thumb_hoejde = ($Thumb_bredde / $Org_bredde) * $Org_hoejde;
    }
    $TMP_Billede = imagecreatetruecolor($Thumb_bredde, $Thumb_hoejde);
    imagecopyresampled($TMP_Billede, $Billede, 0, 0, 0, 0, $Thumb_bredde, $Thumb_hoejde, $Org_bredde, $Org_hoejde);
   
    imagejpeg($TMP_Billede, null, 100);
   
    imagedestroy($TMP_Billede);
    imagedestroy($Billede);
  }

jeg ved godt jeg "bare" kan tilføje et filnavn i stedet for null her: imagejpeg($TMP_Billede, null, 100); men det var det jeg ville forsøge at undgå
Avatar billede jakobdo Ekspert
16. maj 2006 - 22:15 #6
Prøv koden her:

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

function LoadJpeg($imgname)
{
    $im = @imagecreatefromjpeg($imgname); /* Attempt to open */
    if(!$im)
    {
        /* See if it failed */
        $im  = imagecreate(150, 30); /* Create a blank 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 resizeJpeg($image, $maxw, $maxh )
{
    $srcim = LoadJpeg($image);
    $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;
}

//CONFIG
$quality = 100;
$height  = 100;
$width  = 100;

$thumb = resizeJpeg($_GET['image'],$width,$height);

header("Content-type: image/jpeg");
imagejpeg($thumb,NULL,$quality);
imagedestroy($thumb);

?>

Og se et eksempel her: http://www.codebreaker.dk/exp/709432.php?image=http://ipac.jpl.nasa.gov/media_images/large_jpg/sirtf/SIRTF_ir_3b.jpg
Avatar billede sw_red_6 Nybegynder
17. maj 2006 - 10:11 #7
Hmm vil det virke hvis functionen bliver kaldt herfra:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>5 nyeste nyheder</title>
<style>
p {
  margin: 0px;
  padding: 0px;
}
</style>
</head>
<body>
<?php
  include_once('functions.php');
  $thumb = resizeJpeg($_GET['image'],$width,$height);
 
?>
</body>
</html>
Avatar billede jakobdo Ekspert
17. maj 2006 - 10:26 #8
Du skal gemme alt koden fra mit eksempel som f.eks. thumb.php

Så laver du din kode:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>5 nyeste nyheder</title>
<style>
p {
  margin: 0px;
  padding: 0px;
}
</style>
</head>
<body>
<img src="thumb.php?image=billede.jpg" alt="resized billede" />
</body>
</html>
Avatar billede sw_red_6 Nybegynder
17. maj 2006 - 12:48 #9
Alletiders! Jeg har godt nok brugt min egen funktion men nu virker det.
smid et svar...
Avatar billede jakobdo Ekspert
17. maj 2006 - 12:54 #10
Svar!
Avatar billede jakobdo Ekspert
17. maj 2006 - 13:06 #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