Avatar billede phpbegynder2004 Nybegynder
12. april 2004 - 13:30 Der er 20 kommentarer og
2 løsninger

Upload Profilbillede

Hej,
Jeg er gået igang med at lave et community og nu vil jeg også gerne have at folk kan uploade et profilbillede selv.
Jeg har nogle problemer omkring omdøbning af billedet når det bliver uploadet og størrelsen. Hvordan skærer jeg billedet til så det bliver f.eks 130*170?

På forhånd tak!
Avatar billede mikl-dk Nybegynder
12. april 2004 - 14:10 #1
Se resizefunktion på http://php.net/imagecopyresampled - se yderligere dokumentation omkring upload af filer på http://www.php.net/move_uploaded_file hvor der er nogle kommentarer, der forklarer upload.
Avatar billede pgm Nybegynder
12. april 2004 - 14:12 #2
Resize af billedet:
<?php   
#Benytter gdlib

#path hvor du vil gemme dit billede.
$dist = $_SERVER["DOCUMENT_ROOT"]."/pictures/";

#det nye filnavn?
$detnyefilnavn = "hmm.jpg";

#flyt billedet:
move_uploaded_file($_FILES['upfile']['tmp_name'][$i], $dist . $detnyefilnavn);

#Bruger selv: følgende: fjern # og smid det der står ovenfor væk!
#move_uploaded_file($_FILES['upfile']['tmp_name'][$i], $dist . $_FILES['upfile']['name'][$i]);



#Vælg bredden
$tn_w = "160";

#Hent billedets bredde og højde
$imginfo = getimagesize($dist.$_FILES['upfile']['name'][$i]);
$org_w= $imginfo[0];
$org_h = $imginfo[1];

#Beregn højden i forhold til bredden
    $tn_h = floor($tn_w * $org_h / $org_w);
                   
#Sæt det nye billede
    $dst_img = ImageCreate($tn_w,$tn_h);
               
#Ændre det!
    ImageCopyResized($dst_img, $src_img, 0, 0, 0, 0, $tn_w, $tn_h, $org_w, $org_h);
                       
#Gem det!
    ImageJPEG($dst_img, $tndir."thumb_".$_FILES['upfile']['name'][$i]);
   
?>
Avatar billede pgm Nybegynder
12. april 2004 - 14:12 #3
det var et svar...
Avatar billede pgm Nybegynder
12. april 2004 - 14:19 #4
Brug dette istedet, fik ikke læst dit spg ordentligt!

benyt dette vis du vil gemme det som det "rigtige" filnavn.
<?php
#da du måske har flere filer uploaded?
for($i = 0; $i < count($_FILES['upfile']['name']); $i++) {
  #Benytter gdlib

  #path hvor du vil gemme dit billede.
  $dist = $_SERVER["DOCUMENT_ROOT"]."/pictures/";

  #flyt billedet:
  move_uploaded_file($_FILES['upfile']['tmp_name'][$i], $dist . $_FILES['upfile']['name'][$i]);

  #Vælg bredden (pixels!)
  $tn_w = "130";

  #Hent billedets bredde og højde
  $imginfo = getimagesize($dist.$_FILES['upfile']['name'][$i]);
  $org_w= $imginfo[0];
  $org_h = $imginfo[1];

  #Beregn højden i forhold til bredde
  $tn_h = floor($tn_w * $org_h / $org_w);

  #Sæt det nye billede
  $dst_img = ImageCreate($tn_w,$tn_h);

  #Ændre det!
  ImageCopyResized($dst_img, $src_img, 0, 0, 0, 0, $tn_w, $tn_h, $org_w, $org_h);

  #Gem det!
  ImageJPEG($dst_img, $dist.$_FILES['upfile']['name'][$i]);
}
?>

hvis du selv vil sætte filnavnet!
<?php
#da du måske har flere filer uploaded?
for($i = 0; $i < count($_FILES['upfile']['name']); $i++) {
  #Benytter gdlib

  #path hvor du vil gemme dit billede.
  $dist = $_SERVER["DOCUMENT_ROOT"]."/pictures/";

  #det nye filnavn?
  $detnyefilnavn = "hmm.jpg";

  #flyt billedet:
  move_uploaded_file($_FILES['upfile']['tmp_name'][$i], $dist . $detnyefilnavn);

  #Vælg bredden
  $tn_w = "160";

  #Hent billedets bredde og højde
  $imginfo = getimagesize($dist.$detnyefilnavn);
  $org_w= $imginfo[0];
  $org_h = $imginfo[1];

  #Beregn højden i forhold til bredden
  $tn_h = floor($tn_w * $org_h / $org_w);
                 
  #Sæt det nye billede
  $dst_img = ImageCreate($tn_w,$tn_h);
             
  #Ændre det!
  ImageCopyResized($dst_img, $src_img, 0, 0, 0, 0, $tn_w, $tn_h, $org_w, $org_h);
                     
  #Gem det!
  ImageJPEG($dst_img, $tndir."thumb_".$_FILES['upfile']['name'][$i]);
}
?>

hvis du ikke har flere billeder uploadet kan du bare skriv $_FILES['upfile']['name'][0] istedet og fjerne for løkken

Hvis du vil holde en bestemt størrelse, kan du springe beregningerne over for det nye billedes størrelse og vælge $tn_w og $tn_h til at være bredden og højden du ønsker!
Avatar billede phpbegynder2004 Nybegynder
12. april 2004 - 14:28 #5
Tak for svarene.  Kigger lige på dem!
pgm-> gdlib er påkrævet i dit script. Jeg bruger frac.dk... Kan det så lade sig gøre?
Avatar billede pgm Nybegynder
12. april 2004 - 14:38 #6
Kender ikke til frac.dk men på deres forside står der at der er gdlib 2.0 så det burde virker, hvis gdlib ikke er installeret der hvor duskal bruge scriptet har du et problem, dog kan det afhjælpes med ImageMagick, det kræver dog at serveren har dette installeret også... PHP har ikke nogen funktioner i "sigselv" der kan behandle billeder som du ønsker.
Avatar billede phpbegynder2004 Nybegynder
12. april 2004 - 15:48 #7
Du siger jeg skal fjerne for lykken...

Skal jeg fjerne hele denne linie

for($i = 0; $i < count($_FILES['upfile']['name']); $i++) {

og denne nederst }

og indsætte
$_FILES['upfile']['name'][0] øverst?
Avatar billede pgm Nybegynder
12. april 2004 - 17:33 #8
du skal erstatte $_FILES['upfile']['name'][$i] med $_FILES['upfile']['name'][0] over alt i det script du vælger at bruge...

du kan godt se forskelle ikke?
Avatar billede phpbegynder2004 Nybegynder
12. april 2004 - 17:43 #9
Dette er koden:

<?php
if($submit=="Upload"){
#Benytter gdlib

  #path hvor du vil gemme dit billede.
  $dist = "/web/www/frac/users/f97x2/profilbillede/";

  #det nye filnavn?
  $detnyefilnavn = "hmm.jpg";

  #flyt billedet:
  move_uploaded_file($_FILES['upfile']['tmp_name'][$i], $dist . $detnyefilnavn);

  #Vælg bredden
  $tn_w = "160";

  #Hent billedets bredde og højde
  $imginfo = getimagesize($dist.$detnyefilnavn);
  $org_w= $imginfo[0];
  $org_h = $imginfo[1];

  #Beregn højden i forhold til bredden
  $tn_h = floor($tn_w * $org_h / $org_w);
                 
  #Sæt det nye billede
  $dst_img = ImageCreate($tn_w,$tn_h);
             
  #Ændre det!
  ImageCopyResized($dst_img, $src_img, 0, 0, 0, 0, $tn_w, $tn_h, $org_w, $org_h);
                     
  #Gem det!
  ImageJPEG($dst_img, $tndir."thumb_".$_FILES['upfile']['name'][0]);
}
echo"
<form method=POST action=\"upload.php\" enctype=multipart/form-data>
<input type=\"file\" name=\"upfile\" size=\"30\"><br>
<input type=\"submit\" value=\"Upload\" name=\"submit\">";


?>


Dette er fejlmeddelelserne:

Warning: getimagesize(): Unable to access /web/www/frac/users/f97x2/profilbillede/hmm.jpg in /web/www/frac/users/f97x2/upload.php on line 18

Warning: getimagesize(/web/www/frac/users/f97x2/profilbillede/hmm.jpg): failed to open stream: No such file or directory in /web/www/frac/users/f97x2/upload.php on line 18

Warning: Division by zero in /web/www/frac/users/f97x2/upload.php on line 23

Warning: imagecreate(): Invalid image dimensions in /web/www/frac/users/f97x2/upload.php on line 26

Warning: imagecopyresized(): supplied argument is not a valid Image resource in /web/www/frac/users/f97x2/upload.php on line 29

Warning: imagejpeg(): supplied argument is not a valid Image resource in /web/www/frac/users/f97x2/upload.php on line 32
Avatar billede pgm Nybegynder
12. april 2004 - 19:03 #10
Prøv lige dette, så kan tjekker den først om filen er blevet uploadet... (så kan vi se om det er det som er problemet!)
<?php
if($submit=="Upload"){
#Benytter gdlib

  #path hvor du vil gemme dit billede.
  $dist = "/web/www/frac/users/f97x2/profilbillede/";

  #det nye filnavn?
  $detnyefilnavn = "hmm.jpg";

  if(is_uploaded_file($_FILES['upfile']['tmp_name'][$i])) {

    #flyt billedet:
    move_uploaded_file($_FILES['upfile']['tmp_name'][$i], $dist . $detnyefilnavn);

    #Vælg bredden
    $tn_w = "160";

    #Hent billedets bredde og højde
    $imginfo = getimagesize($dist.$detnyefilnavn);
    $org_w= $imginfo[0];
    $org_h = $imginfo[1];

    #Beregn højden i forhold til bredden
    $tn_h = floor($tn_w * $org_h / $org_w);
               
    #Sæt det nye billede
    $dst_img = ImageCreate($tn_w,$tn_h);
           
    #Ændre det!
    ImageCopyResized($dst_img, $src_img, 0, 0, 0, 0, $tn_w, $tn_h, $org_w, $org_h);
                   
    #Gem det!
    ImageJPEG($dst_img, $tndir."thumb_".$_FILES['upfile']['name'][0]);
  } else {
    echo "Filen blev ikke uploadet";
  }
}
echo"
<form method=POST action=\"upload.php\" enctype=multipart/form-data>
<input type=\"file\" name=\"upfile\" size=\"30\"><br>
<input type=\"submit\" value=\"Upload\" name=\"submit\">";

?>
Avatar billede phpbegynder2004 Nybegynder
14. april 2004 - 20:13 #11
Den siger blot: "Filen blev ikke uploadet"

Hvad skal jeg gøre?
Avatar billede pgm Nybegynder
14. april 2004 - 20:30 #12
Ved ikke om det kan give noget men prøv at skifte:
<input type=\"file\" name=\"upfile\" size=\"30\">
ud med:
<input type=\"file\" name=\"upfile[]\" size=\"30\">

scriptet virker ihvertfald på min egen server og et par webhoteller..
Avatar billede pgm Nybegynder
14. april 2004 - 20:33 #13
Måske virker upload slet ikke på frac.dk ? Har du hørt dem af om det?
Avatar billede phpbegynder2004 Nybegynder
14. april 2004 - 20:42 #14
Det virker heller ikke. Jeg har givet den alle rettigheder (777) og det samme med mappen den uploades til så jeg kan ikke forstå det. Jeg ved at almindelig upload uden nogen form for resize virker. Det bruger jeg i øjeblikket. Det virker faktisk fint nok da jeg har sat et loft på størrelsen, det kunne dog være rart hvis ikke selv brugeren var nødt til at resize.
Avatar billede pgm Nybegynder
14. april 2004 - 21:54 #15
kan du ikke poste din nuværende upload funktion, for det er upload funktionen der er fucked, og så kan jeg sætte resize ind i den?
Forstår bare ikke hvorfor det nuværende ikek virker. Men post det andet så kan jeg rette det til for dig.
Avatar billede phpbegynder2004 Nybegynder
16. april 2004 - 16:05 #16
Her er min nuværende upload funktion:
<?
$extlimit = "ja";
$limitedext = array(".gif",".jpg",".png",".jpeg",".bmp");
$sizelimit = "ja";
$sizebytes = "15000";
$absolute_path = $sti."profilbillede";


if($submit=="Upload"){
$dir = "dir";
if ($file != "") {
$ext=strrchr($file_name,'.');
$ext=strtolower("$ext");

if (file_exists("$absolute_path/$id$ext")) {
die("Billedet eksisterer allerede");
}

if (($sizelimit == "ja") && ($file_size > $sizebytes)) {
die("Billedet er for stort. Det må højest fylde 15 kb.");
}


if (($extlimit == "ja") && (!in_array($ext,$limitedext))) {
die("Filen er en forkert filtype.");
}

@copy($file, "$absolute_path/$id$ext") or die("Filen kunne ikke kopieres til serveren $absolute_path/$id$ext");

} else {
die("Husk at vælge et Billede");
}
echo "
<p>";
echo $file_name." blev uploaded";
mysql_query("UPDATE users SET billede='$id$ext' WHERE id='$id'");
}
?>

<form method=POST action="index.php?ske=minside&adr=upload" enctype=multipart/form-data>
<p>Vælg et Billed:<br>
<input type=file name=file size=30>
<p><button name=submit type=submit value=Upload>
Upload
</button>
</form>
Avatar billede pgm Nybegynder
17. april 2004 - 21:32 #17
Har bare indsæt mit script efter @copy...

Nu skulle upload ihvertfald virke nu, hvis der er nogle problemer så skriv dem endelig igen!

<?php
# God idé at starte php tagget med ?php istedet for bare ? , bedre kodestil!

$extlimit = "ja";
$limitedext = array(".gif",".jpg",".png",".jpeg",".bmp");
$sizelimit = "ja";
$sizebytes = "15000";
$absolute_path = $sti."profilbillede";


if($submit=="Upload"){
  $dir = "dir";
if ($file != "") {
  $ext=strrchr($file_name,'.');
  $ext=strtolower("$ext");

if (file_exists("$absolute_path/$id$ext")) {
  die("Billedet eksisterer allerede");
}

if (($sizelimit == "ja") && ($file_size > $sizebytes)) {
  die("Billedet er for stort. Det må højest fylde 15 kb.");
}


if (($extlimit == "ja") && (!in_array($ext,$limitedext))) {
  die("Filen er en forkert filtype.");
}

@copy($file, "$absolute_path/$id$ext") or die("Filen kunne ikke kopieres til serveren $absolute_path/$id$ext");

    #-+ Read the source image
    $src_img = ImageCreateFromJPEG($absolute_path/$id$ext);

    #Vælg bredden
    $tn_w = "160";

    #Hent billedets bredde og højde
    $imginfo = getimagesize($absolute_path/$id$ext);
    $org_w= $imginfo[0];
    $org_h = $imginfo[1];

    #Beregn højden i forhold til bredden
    $tn_h = floor($tn_w * $org_h / $org_w);
             
    #Sæt det nye billede
    $dst_img = ImageCreate($tn_w,$tn_h);
         
    #Ændre det!
    ImageCopyResized($dst_img, $src_img, 0, 0, 0, 0, $tn_w, $tn_h, $org_w, $org_h);
                 
    #Gem det!
    ImageJPEG($dst_img, $absolute_path/$id$ext);

} else {
  die("Husk at vælge et Billede");
}
echo "<p />";
echo $file_name." blev uploaded";
mysql_query("UPDATE users SET billede='$id$ext' WHERE id='$id'");
}
?>

<form method=POST action="index.php?ske=minside&adr=upload" enctype=multipart/form-data>
<p>Vælg et Billed:<br>
<input type=file name=file size=30>
<p><button name=submit type=submit value=Upload>
Upload
</button>
</form>
Avatar billede phpbegynder2004 Nybegynder
18. april 2004 - 02:05 #18
Nu virker det næsten... Billedet bliver uploadet, resized og gemt. Desværre bliver billedet meget mørkt og mister næsten alle sine farver. Hvorfor det?

Var nødt til at rette nogle småfejl med " og ". ."

Koden ser sådan ud:

<?php
$extlimit = "ja";
$limitedext = array(".gif",".jpg",".png",".jpeg",".bmp");
$sizelimit = "nej";
$sizebytes = "15000";
$absolute_path = $sti."profilbillede";


if($submit=="Upload"){
  $dir = "dir";
if ($file != "") {
  $ext=strrchr($file_name,'.');
  $ext=strtolower($ext);

if (file_exists($absolute_path."/".$id."".$ext)) {
  die("Billedet eksisterer allerede");
}

if (($sizelimit == "ja") && ($file_size > $sizebytes)) {
  die("Billedet er for stort. Det må højest fylde 15 kb.");
}


if (($extlimit == "ja") && (!in_array($ext,$limitedext))) {
  die("Filen er en forkert filtype.");
}

@copy($file, $absolute_path."/".$id."".$ext) or die("Filen kunne ikke kopieres til serveren ".$absolute_path."/".$id."".$ext);

    #-+ Read the source image
    $src_img = ImageCreateFromJPEG($absolute_path."/".$id."".$ext);

    #Vælg bredden
    $tn_w = "160";

    #Hent billedets bredde og højde
    $imginfo = getimagesize($absolute_path."/".$id."".$ext);
    $org_w= $imginfo[0];
    $org_h = $imginfo[1];

    #Beregn højden i forhold til bredden
    $tn_h = floor($tn_w * $org_h / $org_w);
             
    #Sæt det nye billede
    $dst_img = ImageCreate($tn_w,$tn_h);
         
    #Ændre det!
    ImageCopyResized($dst_img, $src_img, 0, 0, 0, 0, $tn_w, $tn_h, $org_w, $org_h);
                 
    #Gem det!
    ImageJPEG($dst_img, $absolute_path."/".$id."".$ext);

} else {
  die("Husk at vælge et Billede");
}
echo "<p />";
echo $file_name." blev uploaded";
mysql_query("UPDATE users SET billede='".$id."".$ext."' WHERE id='$id'");
}
?>

<form method=POST action="index.php?ske=minside&adr=upload" enctype=multipart/form-data>
<p>Vælg et Billed:<br>
<input type=file name=file size=30>
<p><button name=submit type=submit value=Upload>
Upload
</button>
</form>
Avatar billede pgm Nybegynder
18. april 2004 - 10:36 #19
burde gøre det?
<?php
$extlimit = "ja";
$limitedext = array(".gif",".jpg",".png",".jpeg",".bmp");
$sizelimit = "nej";
$sizebytes = "15000";
$absolute_path = $sti."profilbillede";


if($submit=="Upload"){
  $dir = "dir";
if ($file != "") {
  $ext=strrchr($file_name,'.');
  $ext=strtolower($ext);

if (file_exists($absolute_path."/".$id."".$ext)) {
  die("Billedet eksisterer allerede");
}

if (($sizelimit == "ja") && ($file_size > $sizebytes)) {
  die("Billedet er for stort. Det må højest fylde 15 kb.");
}


if (($extlimit == "ja") && (!in_array($ext,$limitedext))) {
  die("Filen er en forkert filtype.");
}

@copy($file, $absolute_path."/".$id."".$ext) or die("Filen kunne ikke kopieres til serveren ".$absolute_path."/".$id."".$ext);

    #-+ Read the source image
    $src_img = ImageCreateFromJPEG($absolute_path."/".$id."".$ext);

    #Vælg bredden
    $tn_w = "160";

    #Hent billedets bredde og højde
    $imginfo = getimagesize($absolute_path."/".$id."".$ext);
    $org_w= $imginfo[0];
    $org_h = $imginfo[1];

    #Beregn højden i forhold til bredden
    $tn_h = floor($tn_w * $org_h / $org_w);
           
    #Sæt det nye billede
    $dst_img = imagecreatetruecolor($tn_w,$tn_h);
       
    #Ændre det!
    ImageCopyResized($dst_img, $src_img, 0, 0, 0, 0, $tn_w, $tn_h, $org_w, $org_h);
               
    #Gem det!
    ImageJPEG($dst_img, $absolute_path."/".$id."".$ext);
   
    #slet "midlertidige" filer fra serveren.
    imagedestroy($dst_img);
} else {
  die("Husk at vælge et Billede");
}
echo "<p />";
echo $file_name." blev uploaded";
mysql_query("UPDATE users SET billede='".$id."".$ext."' WHERE id='$id'");
}
?>

<form method=POST action="index.php?ske=minside&adr=upload" enctype=multipart/form-data>
<p>Vælg et Billed:<br>
<input type=file name=file size=30>
<p><button name=submit type=submit value=Upload>
Upload
</button>
</form>
Avatar billede phpbegynder2004 Nybegynder
18. april 2004 - 13:43 #20
Vi er milimeter fra målet... Det bliver uploadet, resized og gemt med farver. Kvaliteten bliver desværre forringet... Jeg prøvede at resize et billede manuelt og med upload funktionen og det manuelle blev klart bedst... Kan det ordnes?

Jeg vil lige sige at jeg er virkelig glad for din hjælp!
Avatar billede pgm Nybegynder
18. april 2004 - 15:23 #21
prøv med:
    ImageJPEG($dst_img, $absolute_path."/".$id."".$ext, "95");

Vi sætter kvaliteten til maximum.
du kan læse mere om den her:
http://dk.php.net/manual/en/function.imagejpeg.php
Avatar billede phpbegynder2004 Nybegynder
18. april 2004 - 15:52 #22
Smukt!
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