Avatar billede s0mmer Nybegynder
30. august 2006 - 22:18 Der er 7 kommentarer og
1 løsning

Automatisk resize ved upload

Hejsa
Er igang med flg. upload kode:
              <?php

  $hvorhen = 'fotos/".$_POST["select"]."';
  $maxstr = 500000;

  if ( !empty( $_FILES['upfil'] ) && is_uploaded_file( $_FILES['upfil']['tmp_name'] ) )
  {                 
    $target = $hvorhen . basename( $_FILES['upfil']['name'] );
      $db->ExecSQL("INSERT INTO snm_galleri (galleri,billede)VALUES('".$_POST["select"]."','".$_POST["select"]."/".$_FILES['upfil']['name']."')");
echo "<script language='Javascript'>
alert ('Billedet er uploadet!')
</script>";
echo "<script> location = 'admin_billeder.php' </script>";
    if ( move_uploaded_file( $_FILES['upfil']['tmp_name'], $target ) )

    {           
      if ( filesize( $target ) > $maxstr )
      {
        unlink( $target );
        die( 'For stor! Max ' . $maxstr . ' bytes.' );
      }
      $inf = getimagesize( $target );
      if ( $inf[2] != 2 )
      {
        unlink( $target );
        die( 'Kun jpeg/jpg!' );
      }
    }
    else
    {
      die( 'Kunne ikke flytte filen.' );
    }
  }
  else
  {
    die( '' );
  }

?>

Det virker fint, men jeg vil gerne have den til at automatisk resize billedet man uploadet til eks. 600x450pixels. Både så de er klar til at blive vist på stedet samt at de ikke fylder så meget. - På forhånd tak
Avatar billede coderdk Praktikant
30. august 2006 - 22:29 #1
Her:

    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 );
    }

Eksempel på brug:

    resize( "billede.jpg", "nytbillede.jpg", 64, 64 );

Webserveren skal naturligvis kunne skrive til den folder hvor det nye billede skal gemmes
Avatar billede s0mmer Nybegynder
30. august 2006 - 22:42 #2
kan jeg få det mikset sammen med min kode?
Avatar billede coderdk Praktikant
31. august 2006 - 00:49 #3
Prøv med:

<?php

  $hvorhen = "fotos/".$_POST["select"];
  $maxstr = 500000;

    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 );
    }

  if ( !empty( $_FILES['upfil'] ) && is_uploaded_file( $_FILES['upfil']['tmp_name'] ) )
  {               
    $target = $hvorhen . basename( $_FILES['upfil']['name'] );
      $db->ExecSQL("INSERT INTO snm_galleri (galleri,billede)VALUES('".$_POST["select"]."','".$_POST["select"]."/".$_FILES['upfil']['name']."')");
echo "<script language='Javascript'>
alert ('Billedet er uploadet!')
</script>";
echo "<script> location = 'admin_billeder.php' </script>";
    if ( move_uploaded_file( $_FILES['upfil']['tmp_name'], $target ) )

    {         
      if ( filesize( $target ) > $maxstr )
      {
        unlink( $target );
        die( 'For stor! Max ' . $maxstr . ' bytes.' );
      }
      $inf = getimagesize( $target );
      if ( $inf[2] != 2 )
      {
        unlink( $target );
        die( 'Kun jpeg/jpg!' );
      }
      resize( $target, $target, 640, 480 );
    }
    else
    {
      die( 'Kunne ikke flytte filen.' );
    }
  }
  else
  {
    die( '' );
  }

?>
Avatar billede s0mmer Nybegynder
31. august 2006 - 12:44 #4
det virker, til dels.. det er somom den beholder proporsitionerne. kan det passe? jeg har sat str. til 600x450, uploader et billede(der er større) og billedet på serveren får str. 600x434- dvs. vertikalt er det korrekt, men er den sat til ikke at "strække" i billedet?
Avatar billede coderdk Praktikant
31. august 2006 - 12:47 #5
Ja, den beholder proportionerne - Alt andet ser normalt komplet latterligt ud :) Du kan bare tilrette resize() funktionen hvis du ikke vil have det gjort pænt ;)
Så kan du fjerne scale- og nw/nh variablene og bare bruge $maxw og $maxh

Sådan:

    function resize( $filename, $newfilename, $maxw, $maxh )
    {
        $srcim = imagecreatefromjpeg( $filename );
        $ow = imagesx( $srcim );
        $oh = imagesy( $srcim );
        $dstim = imagecreatetruecolor( $maxw, $maxh );
        imagecopyresampled( $dstim, $srcim, 0, 0, 0, 0, $maxw, $maxh, $ow, $oh );
        imagejpeg( $dstim, $newfilename, 85 );
        imagedestroy( $dstim );
        imagedestroy( $srcim );
    }
Avatar billede coderdk Praktikant
31. august 2006 - 12:48 #6
Du får lige et svar :)
Avatar billede s0mmer Nybegynder
31. august 2006 - 13:25 #7
Jeg siger mange tak, og ja jeg burde måske lige overveje det med de proportioner :)
Avatar billede coderdk Praktikant
31. august 2006 - 13:28 #8
heheh ja billederne kommer nogle gange til at se lidt fjollede ud :-D
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

IT-JOB