20. januar 2008 - 20:50Der er
30 kommentarer og 1 løsning
Resize billede inden upload
Hejsa, Jeg har lavet et billedgalleri, hvor der hovedsageligt er 3 steps der skal ske i billedupload delen til galleriet.
1. Jeg renamer billedet til en random streng. 2. Billedet skal kopieres fra en folder til en anden. 3. Jeg skal have ændret billedstørrelsen på de uploadede billeder.
Det er step 3, hvor jeg har et problem. Jeg har prøvet at stykke dette kode sammen i en funktion, som jeg kalder på billedet, efter det er uploadet.
Sådan som den er nu, der ser den jo sådan ud: function resize( $filename, $newfilename, $maxw, $maxh, $quality=85 )
Hvad skal jeg sende med der mere end jeg allerede gør? Tænker mest på om $filename skal have den komplette sti med over til billedet? Og hvad indeholder $newfilename?
$filename = filnavnet på den fil som skal resizes. $newfilename = det nye filnavn på filen efter den er resizet. $maxw = max bredde $maxh = max højde $quality = kvalitet fra 0 - 100 (100 = bedst)
hmm...okay. gdlib er det noget man selv skal installere på serveren, eller er det hosten der skal det? I dette tilfælde Surftown? Kan man selv tjekke om de har gdlib installeret?
Prøv helt basic! Opret en mappe: test chmod mappen til: 777 Smid din php kode ind i mappen. Smid et jpg billede i samme mappe. Kald så din php kode, noget i stil med:
<?php //PHP KODE resize('billede.jpg','resized_billede.jpg',100,100); ?>
Nu har jeg lige prøvet at gøre det du skriver, og det virker faktisk, men hvorfor kan jeg ikke lige regne ud?
SKAL den kode ligge i samme mappe som billederne?
Som jeg har det nu, så har jeg mine uploadede billeder i disse to foldere: upload/galler/pic_small upload/galler/pic_large
og min resize function ligger i roden af min webhotel i filen functions.php. Er det så forkert at den ligger der? SKAL den ABSOLUT ligge i samme folder som billederne?
Min kode der håndtere upload af billede ser sådan her ud: $sql = "INSERT INTO gallerier_billeder (galleri_id, kommentar, dato, aktiv) VALUES ('".$_REQUEST['kategori_id']."', '".addslashes($_REQUEST['billed_tekst'])."', '".time()."', 'ja')"; mysql_db_query($dbName, $sql); $last_id = mysql_insert_id();
## Kun 3 følgende fileextensions er tilladte: jpg, jpeg og gif if ($fileext == "jpg" || $fileext == "JPG") { ## Henter billedet der skal uploades $billede = $_FILES['billede']['name'];
## Opretter de 2 biblioteker hvori billederne skal placeres $destination1 = "upload/galleri/pic_small/"; $destination2 = "upload/galleri/pic_large/";
## Omdøber billedfilerne, hvis de indeholder ukorrekte tegn $random = ""; $keychars1 = "abcdefghijklmnopqrstuvwxyz123456789"; while (strlen($random) < 15) { $random .= substr($keychars1, rand(0, strlen($keychars1)-1), 1); } $billede = $random.".".$fileext; $billede2 = $random."_re.".$fileext;
## Opretter en streng med hele stien til billederne $targetfile1 = $destination1.$billede; $targetfile2 = $destination2.$billede;
## Flytter det uploadede billede til den første folder move_uploaded_file($_FILES['billede']['tmp_name'], $targetfile1);
## Kopiere billedet fra den ene folder til den anden folder copy($targetfile1, $targetfile2);
## Ændre størrelsen på de 2 billeder, så de passer efter ønsket resize($targetfile, $billede2, 175, 175); resize($targetfile2, $billede2, 550, 550);
$sql = "UPDATE gallerier_billeder SET filnavn = '$billede' WHERE id = '$last_id'"; mysql_db_query($dbName, $sql); } } header("location: ".$_SERVER['PHP_SELF']."");
og mine billeder bliver uploadet til: upload/galleri/pic_small upload/galleri/pic_large
og min resize kode ligger i functions.php, og det er denne kode: 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; }
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( $srcim, $newfilename, $png_q ); break; default: return false; }
imagedestroy( $dstim ); imagedestroy( $srcim );
return file_exists($newfilename); }
Kan du måske se hvad det er der går galt? For dit eksempel virkede jo godt nok, når jeg lagde det hele i samme fil og i samme mappe som billedet, så virkede det jo fint nok...
Hej igen, Nu ser det ud til at virke. Har nu skrevet sådan her: resize('upload/galleri/pic_small/'.$filnavn,'upload/galleri/pic_small/'.$filnavn,175,175); resize('upload/galleri/pic_large/'.$filnavn,'upload/galleri/pic_large/'.$filnavn,550,550);
Men lige en ting mere. Kan det ikke lade sig gøre at ændre scriptet således, at det kun tager højde for bredden af billedet? således at mine billeder eks. altid bliver 175 og 550 i bredden, så den ikke kigger på højden af billedet?
Sådan er det nemlig nu, og det giver ret mange uens billeder i oversigten...
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.