Avatar billede Slettet bruger
28. april 2007 - 18:05 Der er 9 kommentarer

.Gif .Png driller mig

Hej.

Jeg har fundet det her billed upload system som også resizer billederne. Det virker fint indtil man bruger en anden fil en .jpg.

Nogle der kan hjælpe?

<?php

//opretter forbindelse
//Her skal filen flyttes fra
$src = $_FILES['fil']['tmp_name'];

//Hvilken type fil arbejder vi med?
$ext = strtolower(end(explode(".", $_FILES['fil']['name'])));

//Her giver vi billedet et andet navn, så der ikke kommer to ens navne…
$nytNavn = $_REQUEST['song'] . "-" . $_REQUEST['Kunstner'];

//Her er vores destination for det store billede
$dst = "../upload/" . $nytNavn . "." . $ext;

//her uploades det store billede:
copy($src, $dst);

//billed-funktioner:
$image = $dst;

//hvis billedet eksisterer
if(file_exists($image)) {

//billedet eksisterer
$foto = 1;

//find størrelsen
$imgsize = getimagesize($image);

//hvis bredden er mere end 200px
if($imgsize[0] > 200) {

//sæt det nye billedes bredde til 200,
//og regn højden ud så propertionerne passer
$width = 100;
$height = 100;

//lav et nyt, blankt billede
$dst_img=imagecreatetruecolor($width,$height);

//åbn kildebilledet
$src_img=ImageCreateFromJpeg("$image");

//kopiér og resize kildebilledet over i det nye billede
ImageCopyResampled($dst_img,$src_img,0,0,0,0,$width,$height,ImageSX($src_img),ImageSY($src_img));

//lav output til mappen /tmp/
ImageJpeg($dst_img, "../upload/thumbnail/" . $nytNavn . "_" . $width . "x" . $height . "." . $ext);
       
//hvis bredden ikke er over 200px
} else {

//åbn kildebilledet og lav output
$src_img=ImageCreateFromJpeg("$image");
ImageJpeg($src_img, $dst);
};

//sæt url'en til billedet
$imgurl = "../upload/thumbnail/" . $nytNavn . "_" . $width . "x" . $height . "." . $ext;
} else {

//foto findes ikke
$foto = 0;
};
?>
Avatar billede coderdk Praktikant
28. april 2007 - 19:15 #1
Scriptet virker kun med JPEG.
Avatar billede Slettet bruger
28. april 2007 - 19:30 #2
Ved. Men kan man gøre så det virker med .gif og .png?
Avatar billede coderdk Praktikant
28. april 2007 - 19:34 #3
Ja, du kan checke $ext hvilken type der er tale om, og så bruge imagecreatefromBLAH, hvor BLAH så er gif, png eller whatever. Ved GIF bør man så bruge imagecopyresized i stedet for imagecopyresampled. For at skrive en fil i et andet format skal du så bruge imageBLAH hvor BLAH så er gif, png eller andet.
Avatar billede coderdk Praktikant
28. april 2007 - 19:35 #4
(getimagesize returnerer også en type, hvis man ikke vil bruge $ext)
Avatar billede Slettet bruger
28. april 2007 - 20:25 #5
Kan du ikke være sød at give et eksempel. Så stiger pointne til 100?
Avatar billede coderdk Praktikant
28. april 2007 - 20:51 #6
Noget i stil med nedenstående. Næste gang bør du nok poste til http://www.eksperten.dk/spm/Opgaver/Programmeringsopgaver/PHP/ hvis du ikke vil lave det selv.

<?php

if ( is_uploaded_file( $_FILES['fil']['tmp_name'] ) )
{
  $nytNavn = $_REQUEST['song'] . "-" . $_REQUEST['Kunstner'];
  $ext = strtolower(end(explode(".", $_FILES['fil']['name'])));
  $dst = "../upload/" . $nytNavn . "." . $ext;
  switch ( $ext )
  {
      case "jpg":
      case "jpeg":
      case "pjpeg":
      case "jpe":
        $create = "imagecreatefromjpeg";
        $createnew = "imagecreatetruecolor";
        $save = "imagejpeg";
        $resample = true;
        break;
      case "png":
        $create = "imagecreatefrompng";
        $createnew = "imagecreatetruecolor";
        $save = "imagepng";
        $resample = true;
        break;
      case "gif":
        $create = "imagecreatefromgif";
        $createnew = "imagecreate";
        $save = "imagegif";
        $resample = false;
        break;
  }
  $tmp = tmpnam( "../upload/thumbnail/", "tmp_" );
  move_uploaded_file( $_FILES['fil']['tmp_name'], $tmp );
  $imgsize = getimagesize($tmp);
  if($imgsize[0] > 200)
  {
      $width = 100;
      $height = 100;
      $dst_img = $createnew($width,$height);
      $src_img = $create($tmp);
      if ( $resample )
      {
        ImageCopyResampled($dst_img,$src_img,0,0,0,0,$width,$height,ImageSX($src_img),ImageSY($src_img));   
      }
      else
      {
        ImageCopyResized($dst_img,$src_img,0,0,0,0,$width,$height,ImageSX($src_img),ImageSY($src_img));   
      }
      $trg = "../upload/thumbnail/" . $nytNavn . "_" . $width . "x" . $height . "." . $ext;
      $save($dst_img, $trg);
  }
  else
  {
      $src_img=$create($tmp);
      $save($src_img, $dst);
  }
  $imgurl = "../upload/thumbnail/" . $nytNavn . "_" . $width . "x" . $height . "." . $ext;
}
else
{
  $foto = 0;
}
Avatar billede Slettet bruger
28. april 2007 - 23:20 #7
Den siger desværre denne fejl:
Fatal error: Call to undefined function tmpnam() in C:\Programmer\EasyPHP 2.0b1\www\Admin\New_Movie_Upload.php on line 33

Linje 33 er:
  $tmp = tmpnam( "../upload/thumbnail/", "tmp_" );
Avatar billede coderdk Praktikant
29. april 2007 - 00:24 #8
Ah, det er "tempnam" ikke "tmpnam" :) Det er skrevet i blinde, så det kan være der er småfejl ;P
Avatar billede coderdk Praktikant
29. april 2007 - 00:25 #9
Du kan evt. også have unlink( $tmp ); et sted så vi også sletter den midlertidige fil når vi er færdige.
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