Avatar billede minus Nybegynder
26. maj 2008 - 16:23 Der er 11 kommentarer og
1 løsning

Billedeupload funktion som laver thumbs også

Hej,

Ville gerne høre hvordan man laver en billed-upload funktion, som udover at uploade billeder, også laver en thumbnail på 100x100 px med "thumb_" foran navnet og smider i samme mappe?

Altså når man uploader et billede der hedder hej.jpg, vil den på samme tid lave et thumbnail som hedder thumb_hej.jpg.

Nogen der kan hjælpe med det? Gerne med forklaring så jeg kan se, hvad der sker :)

--------------

Min egen standard upload-funktion pt.:


<form action="" method="post" enctype="multipart/form-data" name="upload" id="upload">

<p>
<label for="image">Upload billede:<br /></label>
<input type="file" name="billede" id="billede" />
</p>
<p>
<input type="submit" name="upload" id="upload" value="Upload" />
</p>
</form>

<?
if (array_key_exists('upload', $_POST)) {
define('UPLOAD_DIR', '../galleri/');
move_uploaded_file($_FILES['billede']['tmp_name'],
UPLOAD_DIR.$_FILES['billede']['name']);
echo "Billede uploadet!";
}
?>


---------------------

Takker på forhånd :)
Avatar billede jakobdo Ekspert
26. maj 2008 - 17:18 #1
Brug denne artikel som udgangspunkt:

http://www.eksperten.dk/artikler/1098

Og så skal du efter move_uploaded_file() bare kalde funktionen resize() fra denne artikel:

http://www.eksperten.dk/artikler/1130
Avatar billede minus Nybegynder
27. maj 2008 - 09:23 #2
jakobdo --> Har kigget det igennem. Hvordan får jeg implementeret resize funktionen i uploadsciptet? Og vil den på samme tid dublere billedet og ændre størrelsen på thumb_xxx.xxx-billedet? :)
Avatar billede jakobdo Ekspert
27. maj 2008 - 10:14 #3
Denne kode tjekker om flyt filen går godt.

//Vi flytter filen fra tmp til vores UPLOADDIR
      if(move_uploaded_file($_FILES['myFile']['tmp_name'],$uploadDir . basename($_FILES['myFile']['name'])))
      {
        echo '<h3 style="color:green;">File ('.basename($_FILES['myFile']['name']).') uploaded succesfully</h3>';
      }

Hvis du så tilføjer:
resize($uploadDir . basename($_FILES['myFile']['name']), $uploadDir . 'thumb_' . basename($_FILES['myFile']['name']), 200,200);
Lige over echo, så resizer den.
Avatar billede minus Nybegynder
27. maj 2008 - 10:55 #4
jakobdo---> Er lidt på bar bund. Er nemlig lige starte med php, og det er kun på et meget basic niveau. Så det meste, af hvad der foregår er noget der flyver forbi. :)

Kunne jeg bede om en færdiglavet kode, med forklaringer i koden eller ved siden af, så jeg kan få en forståelse for det? :)
Avatar billede jakobdo Ekspert
27. maj 2008 - 11:33 #5
Noget ala:

<?php
$uploadDir = 'upload/'; //Bibliotek hvor filer uploades til - husk chmod 777
$allowedFileTypes = array('jpg','gif','png'); //Hvilke filer vil vi acceptere bliver uploadet?

function resize( $filename, $newfilename, $maxw, $maxh, $quality=85 )
{
  $ext = strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) );
  switch($ext)
  {
    case 'jpeg':
    case 'jpe':
    case 'jpg':
      $srcim = imagecreatefromjpeg( $filename );
      break;
    case 'gif':
      $srcim = imagecreatefromgif( $filename );
      break;
    case 'png':
      $srcim = imagecreatefrompng( $filename );
      break;
    default:
      return false;
  }
  $ow = imagesx( $srcim );
  $oh = imagesy( $srcim );
  $wscale = $maxw / $ow;
  $hscale = $maxh / $oh;
  $scale = min( $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 );
  switch($ext)
  {
    case 'jpeg':
    case 'jpe':
    case 'jpg':
      imagejpeg( $dstim, $newfilename, $quality );
      break;
    case 'gif':
      imagegif( $dstim, $newfilename );
      break;
    case 'png':
      $png_q = floor( abs( $quality / 10 - 9.9 ) );
      imagepng( $dstim, $newfilename, $png_q );
      break;
    default:
      return false;
  }
  imagedestroy( $dstim );
  imagedestroy( $srcim );
  return file_exists($newfilename);
}

//Er der trykket på Upload file knappen?
if(isset($_POST['myUpload']))
{
  //Har vi en fil?
  if(is_uploaded_file($_FILES['myFile']['tmp_name']))
  {
    //Filendelse
    $extension = strtolower(pathinfo($_FILES['myFile']['name'],PATHINFO_EXTENSION));
   
    //Er filen en af de filer vi gerne vil have?
    if(in_array($extension,$allowedFileTypes))
    {
      //Vi flytter filen fra tmp til vores UPLOADDIR
      if(move_uploaded_file($_FILES['myFile']['tmp_name'],$uploadDir . basename($_FILES['myFile']['name'])))
      {
          if(resize($uploadDir . basename($_FILES['myFile']['name']), $uploadDir . 'thumb_' . basename($_FILES['myFile']['name']), 200,200)){
              echo '<h3 style="color:red;">Error - unable to resize file: '.basename($_FILES['myFile']['name']).'</h3>';
          }else{
            echo '<h3 style="color:green;">File ('.basename($_FILES['myFile']['name']).') uploaded and resized succesfully</h3>';
        }
      }
      else
      {
        echo '<h3 style="color:red;">Error - unable to upload file: '.basename($_FILES['myFile']['name']).'</h3>';
      }
    }
    else
    {
      echo '<h3 style="color:red;">Wrong filetype, allowed filetypes are: ('.implode(',',$allowedFileTypes).')</h3>';
    }
  }
  else
  {
    echo '<h3 style="color:red;">No file selected<h3>';
  }
}

//Vores form
echo '<form action="upload.php" method="post" enctype="multipart/form-data">';
echo 'File ('.implode(',',$allowedFileTypes).'): <input type="file" name="myFile"><br />';
echo '<input type="submit" name="myUpload" value="Upload file">';
echo '</form>';

?>
Avatar billede minus Nybegynder
27. maj 2008 - 11:42 #6
jakobdo --> Super, det virker som det skal. Den finder let ud af at resize og smide det rigtige billede op. Men får følgende fejl alligevel "Error - unable to resize file:".

Det kunne tænktes at jeg bare kunne slette denne linje, men kunne da være rart at fejlen kom frem, når der virkelig er en fejl :)
Avatar billede jakobdo Ekspert
27. maj 2008 - 11:56 #7
Byt rundt på disse 2 linjer:

echo '<h3 style="color:red;">Error - unable to resize file: '.basename($_FILES['myFile']['name']).'</h3>';

Og
echo '<h3 style="color:green;">File ('.basename($_FILES['myFile']['name']).') uploaded and resized succesfully</h3>';

Var lidt for hurtig.
Avatar billede minus Nybegynder
27. maj 2008 - 16:19 #8
Ahh ja :)

Lige en sidste ting, kan det lade sig gøre at thumbnailsene bliver smidt ind i en undermappe i galleri-mappen som hedder thumb?

Koden som den ser ud nu:

<?php
$uploadDir = 'galleri/'; //Bibliotek hvor filer uploades til - husk chmod 777
$allowedFileTypes = array('jpg','gif','png'); //Hvilke filer vil vi acceptere bliver uploadet?

function resize( $filename, $newfilename, $maxw, $maxh, $quality=85 )
{
  $ext = strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) );
  switch($ext)
  {
    case 'jpeg':
    case 'jpe':
    case 'jpg':
      $srcim = imagecreatefromjpeg( $filename );
      break;
    case 'gif':
      $srcim = imagecreatefromgif( $filename );
      break;
    case 'png':
      $srcim = imagecreatefrompng( $filename );
      break;
    default:
      return false;
  }
  $ow = imagesx( $srcim );
  $oh = imagesy( $srcim );
  $wscale = $maxw / $ow;
  $hscale = $maxh / $oh;
  $scale = min( $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 );
  switch($ext)
  {
    case 'jpeg':
    case 'jpe':
    case 'jpg':
      imagejpeg( $dstim, $newfilename, $quality );
      break;
    case 'gif':
      imagegif( $dstim, $newfilename );
      break;
    case 'png':
      $png_q = floor( abs( $quality / 10 - 9.9 ) );
      imagepng( $dstim, $newfilename, $png_q );
      break;
    default:
      return false;
  }
  imagedestroy( $dstim );
  imagedestroy( $srcim );
  return file_exists($newfilename);
}

//Er der trykket på Upload file knappen?
if(isset($_POST['myUpload']))
{
  //Har vi en fil?
  if(is_uploaded_file($_FILES['myFile']['tmp_name']))
  {
    //Filendelse
    $extension = strtolower(pathinfo($_FILES['myFile']['name'],PATHINFO_EXTENSION));
 
    //Er filen en af de filer vi gerne vil have?
    if(in_array($extension,$allowedFileTypes))
    {
      //Vi flytter filen fra tmp til vores UPLOADDIR
      if(move_uploaded_file($_FILES['myFile']['tmp_name'],$uploadDir . basename($_FILES['myFile']['name'])))
      {
          if(resize($uploadDir . basename($_FILES['myFile']['name']), $uploadDir . 'thumb_' . basename($_FILES['myFile']['name']), 100,100)){
              echo '<h3 style="color:green;">File ('.basename($_FILES['myFile']['name']).') uploaded and resized succesfully</h3>';
          }else{
            echo '<h3 style="color:red;">Error - unable to resize file: '.basename($_FILES['myFile']['name']).'</h3>';
        }
      }
      else
      {
        echo '<h3 style="color:red;">Error - unable to upload file: '.basename($_FILES['myFile']['name']).'</h3>';
      }
    }
    else
    {
      echo '<h3 style="color:red;">Wrong filetype, allowed filetypes are: ('.implode(',',$allowedFileTypes).')</h3>';
    }
  }
  else
  {
    echo '<h3 style="color:red;">No file selected<h3>';
  }
}

//Vores form
echo '<form action="upload.php" method="post" enctype="multipart/form-data">';
echo 'File ('.implode(',',$allowedFileTypes).'): <input type="file" name="myFile"><br />';
echo '<input type="submit" name="myUpload" value="Upload file">';
echo '</form>';

?>

---

Du må iøvrigt gerne smide et svar :)
Avatar billede jakobdo Ekspert
27. maj 2008 - 22:07 #9
Ja, du skal blot rette:
if(resize($uploadDir . basename($_FILES['myFile']['name']), $uploadDir . 'thumb_' . basename($_FILES['myFile']['name']), 100,100)){
til:
if(resize($uploadDir . basename($_FILES['myFile']['name']), $uploadDir . 'thumbs/thumb_' . basename($_FILES['myFile']['name']), 100,100)){

Så vil filerne blive smidt i mappen thumbs. Husk chmod 777 af mappen.
Avatar billede jakobdo Ekspert
27. maj 2008 - 22:07 #10
Og et svar
Avatar billede minus Nybegynder
27. maj 2008 - 23:40 #11
Rigtig lækkert :) Jeg siger mange tak.
Avatar billede jakobdo Ekspert
28. maj 2008 - 03:20 #12
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