Avatar billede axan Nybegynder
29. december 2010 - 14:37 Der er 21 kommentarer og
1 løsning

Upload, resize, thumbnail

Nogen her der kan anbefale et script med følgende funktioner:

-  upload jpg evt også gif.

-  resize til fx. 600x500 px. og gemme i en bestemt folder med unikt navn, så der ikke opstår fejl hvis filnavnet findes.

-  lave en thumbnail og gemme den i anden folder med unikt navn.


Det må meget gerne være med god forklaring af koden.

Det skal kunne virke med php5.
Avatar billede repox Seniormester
29. december 2010 - 14:42 #1
Avatar billede jakobdo Ekspert
29. december 2010 - 15:02 #2
Avatar billede axan Nybegynder
29. december 2010 - 15:17 #3
jakobdo:
Tak. Men jeg kan ikke få øje på, hvor der det oploadede billede laves til andet end en thumbnail. Der skulle jo gerne være et lidt større billede også på fx. 600x500px.
Avatar billede jakobdo Ekspert
29. december 2010 - 15:21 #4
Du skal bare kalde resize() en ekstra gang.
Avatar billede axan Nybegynder
29. december 2010 - 15:30 #5
Altså noget af denne stump kode?

resize($uploadDir . basename($_FILES['myFile']['name']), $thumbDir . $thumbPrefix . basename($_FILES['myFile']['name']), $thumbWidth, $thumbHeight, $thumbQuality)

naturligvis med andre variabler.

Men hvor putter jeg den ind henne?
Avatar billede jakobdo Ekspert
29. december 2010 - 15:38 #6
Du kan putte den efter første kald til resize()

Se f.eks.

if(move_uploaded_file($_FILES['myFile']['tmp_name'],$uploadDir . basename($_FILES['myFile']['name'])))

Det uploader den original fil / billede.

if(resize($uploadDir . basename($_FILES['myFile']['name']), $thumbDir . $thumbPrefix . basename($_FILES['myFile']['name']), $thumbWidth, $thumbHeight, $thumbQuality)){

Opretter en thumb, i henhold til de angivne størrelse i toppen af scriptet.
Så kan du kalde resize() inde i
if(...){
resize(....);
}

og så skulle det spille.
Avatar billede axan Nybegynder
29. december 2010 - 20:21 #7
ok. det gør den så ikke.

Sådan ser koden nu ud.

if(resize($uploadDir . basename($_FILES['myFile']['name']), $thumbDir . $thumbPrefix . basename($_FILES['myFile']['name']), $thumbWidth, $thumbHeight, $thumbQuality) && resize($uploadDir . basename($_FILES['myFile']['name']), $imgDir . $imgPrefix . basename($_FILES['myFile']['name']), $imgWidth, $imgHeight, $imgQuality){
Avatar billede jakobdo Ekspert
29. december 2010 - 20:37 #8
Hvad gør den ikke ?
Avatar billede axan Nybegynder
29. december 2010 - 21:10 #9
Den gør bare slet igenting. Ikke engang en fejlmeddelelse.

Er koden ellers rigtigt sat ind?
Avatar billede jakobdo Ekspert
29. december 2010 - 21:25 #10
Prøv at start med at brug min standard kode som den er og få den til at virke.
Når den så virker, så rediger den, så du får 2 resizede billeder.

Har du husket at chmod'e dir'et du uploader til ?
Avatar billede axan Nybegynder
29. december 2010 - 22:30 #11
Ja. standardkoden virker.

Det er da && der skal bruges, ikk?
Avatar billede jakobdo Ekspert
29. december 2010 - 22:35 #12
Det kan du godt jo, hvis du ellers skriver den rigtige kode ind efterfølgende.

&& betyder jo AND
Og går begge resize godt, så skriver den koden for OK.
Avatar billede axan Nybegynder
29. december 2010 - 22:56 #13
måske det er noget med php5 på serveren.
Avatar billede jakobdo Ekspert
29. december 2010 - 23:01 #14
Nej, det burde også virke fint fint.
Prøv at test begge koder hver for sig.
Og vent med &&
Avatar billede axan Nybegynder
30. december 2010 - 12:22 #15
Så nu får jeg fejlmeddelelser.

Parse error: syntax error, unexpected T_ELSE line 102.

Det er den sidste else i koden.
Avatar billede jakobdo Ekspert
30. december 2010 - 12:25 #16
Så mangler du nok en } et sted.
Avatar billede axan Nybegynder
30. december 2010 - 12:42 #17
Ja, nu ser det ud til at virke, men gør det ikke. Kan kan vælge fil og får at vide, at den er oploaded. Men der er ingen filer at finde i de to biblioteker.
Avatar billede axan Nybegynder
30. december 2010 - 12:57 #18
Nu er der igen problemer med et {

Jeg kan ikke finde rundt i de {}

Hele den kodes ordenlige opstilling ødelægges, når jeg copy/paster. Det hele klaskes sammen.
Avatar billede jakobdo Ekspert
30. december 2010 - 17:41 #19
Du lærer jo desværre ikke noget af det, men prøv følgende kode:

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

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

//THUMBS SETTINGS
$thumbDir        = 'thumbs/'; //Bibliotek, hvor thumbs gemmes - husk chmod 777
$thumbPrefix      = 'thumb_';  //Hvad skal tilføjes til originalt filnavn?
$thumbHeight      = 200;      //Thumb højde
$thumbWidth      = 200;      //Thumb bredde
$thumbQuality    = 85;        //Kvalitet af thumb, kan være fra 0 - dårligt til 100 - bedst

//RESIZED SETTINGS
$resizeDir        = 'resize/'; //Bibliotek, hvor thumbs gemmes - husk chmod 777
$resizePrefix      = 'resize_'; //Hvad skal tilføjes til originalt filnavn?
$resizeHeight      = 600;      //Thumb højde
$resizeWidth      = 500;      //Thumb bredde
$resizeQuality    = 85;        //Kvalitet af thumb, kan være fra 0 - dårligt til 100 - bedst

//Funktioner som bruges:
function getExtension($filename){
  return strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) );
}

function resize( $filename, $newfilename, $maxw, $maxh, $quality=85 ){
  $extension = getExtension($filename);
  switch($extension){
    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($extension){
    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 = getExtension($_FILES['myFile']['name']);
   
    $new_filename = sha1(uniqid());
   
    //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 . $new_filename . '.' . $extension)){
          if(
            resize($uploadDir . $new_filename . '.' . $extension, $thumbDir . $thumbPrefix . $new_filename . '.' . $extension, $thumbWidth, $thumbHeight, $thumbQuality)
            &&
            resize($uploadDir . $new_filename . '.' . $extension, $resizeDir . $resizePrefix . $new_filename . '.' . $extension, $resizeWidth, $resizeHeight, $resizeQuality)
            ){
              echo '<h3 style="color:green;">File ('.$new_filename . '.' . $extension.') uploaded, resized and thumbed succesfully</h3>';
          }else{
            echo '<h3 style="color:red;">File ('.$new_filename . '.' . $extension.') uploaded succesfully, but resize and thumb failed</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>';
  }
}
?>
    <form action="" method="post" enctype="multipart/form-data">
      <div>File (<?=implode(',',$allowedFileTypes)?>): <input type="file" name="myFile"></div>
      <div><input type="submit" name="myUpload" value="Upload file"></div>
Avatar billede axan Nybegynder
30. december 2010 - 23:07 #20
Fik det efter list tid til at virke. Jeg må prøve at bygge videre på det script, så det også renamer unikt mm.

Mange tak for hjælp.

Læg et svar hvis du gerne vil have dem.
Avatar billede jakobdo Ekspert
30. december 2010 - 23:10 #21
Det renamer da allerede unikt ?

Og du får et svar.
Avatar billede axan Nybegynder
31. december 2010 - 00:30 #22
ja det er rigtigt. Mente også noget andet. at filnavnet skulle trimmes så der kun var engelske tal og bogstaver.
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