Anders Moen Skrevet 7. oktober 2007 Del Skrevet 7. oktober 2007 (endret) Hvordan kan mangjøre om størrelsen på et bilde under upload? Fant en kode på et eksempel på php.net, men jeg får ikke til.. $avatar = $_FILES['img']['type']; $avatar2 = $_FILES['img']['name']; $avatar3 = $_FILES['img']['tmp_name']; if ((($avatar == 'image/jpg') || ($avatar == 'image/jpeg') || ($avatar == 'image/JPG') || ($avatar == 'image/gif') || ($avatar == 'image/bmp') || ($avatar == 'image/png'))) { move_uploaded_file($avatar3, "v2/images/avatars/" . $avatar2); rename("v2/images/avatars/" . $avatar2 . "", "v2/images/avatars/" . $_SESSION['id'] . ".jpg"); mysql_query("UPDATE users SET avatar = '" . $_SESSION['id'] . ".jpg' WHERE id = " . $_SESSION['id'] . ""); // File and new size $filename = "v2/images/avatars/" . $_SESSION['id'] . ".jpg"; $percent = 0.5; // Content type header('Content-type: image/jpg'); // Get new sizes list($width, $height) = getimagesize($filename); $newwidth = $width * $percent; $newheight = $height * $percent; // Load $thumb = imagecreatetruecolor($newwidth, $newheight); $source = imagecreatefromjpeg($filename); // Resize imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); // Output imagejpeg($thumb); header('Location: /forum/profile/avatar'); } Noen som vet? (Nei, jeg har aldri prøvd å resize bilder utenom i ps før så detta her kan jeg ikke) Edit: Koden som var på php.net var bare denne Klikk for å se/fjerne innholdet nedenfor // File and new size $filename = "v2/images/avatars/" . $_SESSION['id'] . ".jpg"; $percent = 0.5; // Content type header('Content-type: image/jpg'); // Get new sizes list($width, $height) = getimagesize($filename); $newwidth = $width * $percent; $newheight = $height * $percent; // Load $thumb = imagecreatetruecolor($newwidth, $newheight); $source = imagecreatefromjpeg($filename); // Resize imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); // Output imagejpeg($thumb); Edit: Bildene skal bli 80x80px hvis dere lurer Endret 7. oktober 2007 av Anders-Moen Lenke til kommentar
nree Skrevet 7. oktober 2007 Del Skrevet 7. oktober 2007 Finnes en del om dette på Google, http://www.google.no/search?hl=no&q=resize...-s%C3%B8k&meta= Kan dessverre ikke gi noe konkret svar selv. Lenke til kommentar
Gjest Slettet+142 Skrevet 7. oktober 2007 Del Skrevet 7. oktober 2007 (endret) Jeg tror du skal se godt gjennom de funksjonene + argumentene som er i koden din jeg. Du oppgir et annet filnavn for imagecreatefromjpeg() enn til move_uploaded_file()... Prøv å lage en "lokal" variabel for $_SESSION["id"], da vil koden også se litt ryddigere ut.. Jeg skal se om jeg får fikset koden din snart om ingen andre gjør det, men har lekser først Endret 7. oktober 2007 av Slettet+142 Lenke til kommentar
kakkle Skrevet 7. oktober 2007 Del Skrevet 7. oktober 2007 Vel, han tar jo en rename etter at han har brukt move_uploaded_file. Det nye filenavnet ($_SESISON['id'].jpg) kan du forsåvidt angi direkte i move_uploaded_file. Er enig at det ville vært litt mer oversiktlig, dersom $_SESSION['id'] fikk en "lokal variabel: $id=$_SESSION['id']; Jeg savner litt informasjon om hva som er problemet. Er det at bildet ikke blir endret størrelse, eller er det at bildet ikke ligger der det skal ligge ? Du sier også at størrelsen skal bli 80x80. Men utifra koden, så blir størrelsen halvparten av den opprinnelige størrelsen ($width*0,5) Men si litt mer om hva som skjer, og hva som ikke skjer... Evt feilmeldinger du får. Lenke til kommentar
Anders Moen Skrevet 7. oktober 2007 Forfatter Del Skrevet 7. oktober 2007 Du sier også at størrelsen skal bli 80x80. Men utifra koden, så blir størrelsen halvparten av den opprinnelige størrelsen ($width*0,5) Ja, som jeg sa så fant jeg koden på php.net og jeg har egentlig ingen peiling på hva som foregikk i den. Står ingenting om hva som liksom skjer i koden (ikke noe jeg fant i allfall) Jeg tror du skal se godt gjennom de funksjonene + argumentene som er i koden din jeg.Du oppgir et annet filnavn for imagecreatefromjpeg() enn til move_uploaded_file()... Nei, men som jeg kan se så er de likevel like. Men si litt mer om hva som skjer, og hva som ikke skjer... Evt feilmeldinger du får. Det kan jeg gjøre i morra når jeg kjem hjem fra jobb, orker ikke begynne å putte på igjen koden akkurat nå..(tok den av så lenge skjønner du) Lenke til kommentar
Gjest Slettet+142 Skrevet 7. oktober 2007 Del Skrevet 7. oktober 2007 (endret) Du sier også at størrelsen skal bli 80x80. Men utifra koden, så blir størrelsen halvparten av den opprinnelige størrelsen ($width*0,5) Ja, som jeg sa så fant jeg koden på php.net og jeg har egentlig ingen peiling på hva som foregikk i den. Står ingenting om hva som liksom skjer i koden (ikke noe jeg fant i allfall) 9658120[/snapback] Parameters dst_im Destination image link resource src_im Source image link resource dst_x x-coordinate of destination point dst_y y-coordinate of destination point src_x x-coordinate of source point src_y y-coordinate of source point dst_w Destination width dst_h Destination height src_w Source width src_h Source height edit: spoiler Endret 7. oktober 2007 av Slettet+142 Lenke til kommentar
Anders Moen Skrevet 7. oktober 2007 Forfatter Del Skrevet 7. oktober 2007 Å ja..ok Takk, skal se på det der, og se om jeg skjønner noe Lenke til kommentar
Gjest Slettet+142 Skrevet 7. oktober 2007 Del Skrevet 7. oktober 2007 (endret) Men nå har jeg faktisk gjort litt, slik at koden din forhåpentligvis skal virke $avatartype = strtolower($_FILES['img']['type']); $avatarnavn = $_FILES['img']['name']; $avataraddr = $_FILES['img']['tmp_name']; $tillatte_typer = array( 'image/jpg', 'image/jpeg', 'image/gif', // 'image/bmp', 'image/png' ); if ( in_array( $avatartype, $tillatte_typer ) ) { $id = $_SESSION['id']; $fil = explode(".", $avatarnavn); if(count($fil) > 0) $filendelse = $fil[count($fil)-1]; else die("Feil: Filetternavn ikke funnet!"); unset($fil); move_uploaded_file($avataraddr, "v2/images/avatars/" . $avatarnavn); rename("v2/images/avatars/" . $avatarnavn . "", "v2/images/avatars/{$id}.{$filendelse}"); mysql_query("UPDATE users SET avatar = '{$id}.{$filendelse}' WHERE id = {$id}"); // File and new size $filename = "v2/images/avatars/{$id}.{$filendelse}"; $bredde = 80; $hoyde = 80; // Content type switch($avatartype){ case 'image/jpg': case 'image/jpeg': header('Content-type: image/jpg'); $source = imagecreatefromjpeg($filename); break; case 'image/gif': header('Content-type: image/gif'); $source = imagecreatefromgif($filename); break; /* case 'image/bmp': header('Content-type: image/bmp'); $source = imagecreatefrom??($filename); finnes det funksjon for dette? break; */ case 'image/png': header('Content-type: image/png'); $source = imagecreatefrompng($filename); break; default: die("Filtypen støttes ikke!"); } // Load $thumb = imagecreatetruecolor($bredde, $hoyde); // Resize imagecopyresized($thumb, $source, 0, 0, 0, 0, $bredde, $hoyde, $width, $height); // Output unlink($filename); switch($avatartype){ case 'image/jpg': case 'image/jpeg': imagejpeg($thumb, $filename); break; case 'image/gif': imagegif($thumb, $filename); break; /* case 'image/bmp': image??($thumb, $filename); break; */ case 'image/png': imagepng($thumb, $filename); break; } header('Location: /forum/profile/avatar'); } Håper den funker EDIT: "Bugfix" Endret 7. oktober 2007 av Slettet+142 Lenke til kommentar
Anders Moen Skrevet 7. oktober 2007 Forfatter Del Skrevet 7. oktober 2007 (endret) Takk for koden! Skal teste den hvert øyeblikk Edit: Jeg fikk et helt svart bilde..men den ble iallfall 80x80px Endret 7. oktober 2007 av Anders-Moen Lenke til kommentar
Gjest Slettet+142 Skrevet 7. oktober 2007 Del Skrevet 7. oktober 2007 Prøv å kutte ut den siste header()-funksjonen og se om det kommer noen feilmeldinger da Lenke til kommentar
Anders Moen Skrevet 7. oktober 2007 Forfatter Del Skrevet 7. oktober 2007 Da ble sida seenes slik ut etter opplastning: Lenke til kommentar
Gjest Slettet+142 Skrevet 7. oktober 2007 Del Skrevet 7. oktober 2007 Hmm, da får du prøve denne da: $avatartype = strtolower($_FILES['img']['type']); $avatarnavn = $_FILES['img']['name']; $avataraddr = $_FILES['img']['tmp_name']; $tillatte_typer = array( 'image/jpg', 'image/jpeg', 'image/gif', // 'image/bmp', 'image/png' ); if ( in_array( $avatartype, $tillatte_typer ) ) { $id = $_SESSION['id']; $fil = explode(".", $avatarnavn); if(count($fil) > 0) $filendelse = $fil[count($fil)-1]; else die("Feil: Filetternavn ikke funnet!"); unset($fil); move_uploaded_file($avataraddr, "v2/images/avatars/" . $avatarnavn); rename("v2/images/avatars/" . $avatarnavn . "", "v2/images/avatars/{$id}.{$filendelse}"); mysql_query("UPDATE users SET avatar = '{$id}.{$filendelse}' WHERE id = {$id}"); // File and new size $filename = "v2/images/avatars/{$id}.{$filendelse}"; $bredde = 80; $hoyde = 80; // Content type switch($avatartype){ case 'image/jpg': case 'image/jpeg': header('Content-type: image/jpg'); $source = imagecreatefromjpeg($filename); break; case 'image/gif': header('Content-type: image/gif'); $source = imagecreatefromgif($filename); break; /* case 'image/bmp': header('Content-type: image/bmp'); $source = imagecreatefrom??($filename); finnes det funksjon for dette? break; */ case 'image/png': header('Content-type: image/png'); $source = imagecreatefrompng($filename); break; default: die("Filtypen støttes ikke!"); } // Load $thumb = imagecreatetruecolor($bredde, $hoyde); // Resize imagecopyresized($thumb, $source, 0, 0, 0, 0, $bredde, $hoyde, $width, $height); // Output unlink($filename); switch($avatartype){ case 'image/jpg': case 'image/jpeg': imagejpeg($thumb, $filename); break; case 'image/gif': imagegif($thumb, $filename); break; /* case 'image/bmp': image??($thumb, $filename); break; */ case 'image/png': imagepng($thumb, $filename); break; } echo file_get_contents($filename); //header('Location: /forum/profile/avatar'); } Fjern // foran siste header() om bildet funker Lenke til kommentar
Anders Moen Skrevet 7. oktober 2007 Forfatter Del Skrevet 7. oktober 2007 (endret) Sorry, men den var fortsatt sånn at den ikke finner bildet.. Takker uansett for hjelp så langt Edit: Bildet blir uansett lasta opp, men det er bare svart. Edit 2: 1991 innlegg - fødselsåret mitt lol Endret 7. oktober 2007 av Anders-Moen Lenke til kommentar
Gjest Slettet+142 Skrevet 7. oktober 2007 Del Skrevet 7. oktober 2007 (endret) Hehe Men ok. Da kommer jeg med kveldens siste forsøk: $avatartype = strtolower($_FILES['img']['type']); $avatarnavn = $_FILES['img']['name']; $avataraddr = $_FILES['img']['tmp_name']; $tillatte_typer = array( 'image/jpg', 'image/jpeg', 'image/gif', // 'image/bmp', 'image/png' ); if ( in_array( $avatartype, $tillatte_typer ) ) { $id = $_SESSION['id']; $fil = explode(".", $avatarnavn); if(count($fil) > 0) $filendelse = $fil[count($fil)-1]; else die("Feil: Filetternavn ikke funnet!"); unset($fil); move_uploaded_file($avataraddr, "v2/images/avatars/" . $avatarnavn); rename("v2/images/avatars/" . $avatarnavn . "", "v2/images/avatars/orig_{$id}.{$filendelse}"); mysql_query("UPDATE users SET avatar = '{$id}.{$filendelse}' WHERE id = {$id}"); // File and new size $filename = "v2/images/avatars/orig_{$id}.{$filendelse}"; $nfilename = "v2/images/avatars/{$id}.{$filendelse}"; $bredde = 80; $hoyde = 80; // Content type switch($avatartype){ case 'image/jpg': case 'image/jpeg': header('Content-type: image/jpg'); $source = imagecreatefromjpeg($filename); break; case 'image/gif': header('Content-type: image/gif'); $source = imagecreatefromgif($filename); break; /* case 'image/bmp': header('Content-type: image/bmp'); $source = imagecreatefrom??($filename); finnes det funksjon for dette? break; */ case 'image/png': header('Content-type: image/png'); $source = imagecreatefrompng($filename); break; default: die("Filtypen støttes ikke!"); } // Load $thumb = imagecreatetruecolor($bredde, $hoyde); // Resize imagecopyresized($thumb, $source, 0, 0, 0, 0, $bredde, $hoyde, $width, $height); // Output switch($avatartype){ case 'image/jpg': case 'image/jpeg': imagejpeg($thumb, $nfilename); break; case 'image/gif': imagegif($thumb, $nfilename); break; /* case 'image/bmp': image??($thumb, $nfilename); break; */ case 'image/png': imagepng($thumb, $nfilename); break; } unlink($filename); echo file_get_contents($nfilename); //header('Location: /forum/profile/avatar'); } Edit; "Bugfix" igjen Endret 7. oktober 2007 av Slettet+142 Lenke til kommentar
Anders Moen Skrevet 7. oktober 2007 Forfatter Del Skrevet 7. oktober 2007 Den funka heller ikke...må vel snart være jeg som gjør noe rart eller? Si ifra om du vil se enda mere kode, som egentlig ikke har noe med upload og resize og gjøre (men det ligger i samme fila) Lenke til kommentar
Gjest Slettet+142 Skrevet 8. oktober 2007 Del Skrevet 8. oktober 2007 Da har jeg sett koden med dagens nye øyne, og sett av jeg har klart å glemme å sette $width og $height Fix er her, håper den virker, hade: $avatartype = strtolower($_FILES['img']['type']); $avatarnavn = $_FILES['img']['name']; $avataraddr = $_FILES['img']['tmp_name']; $tillatte_typer = array( 'image/jpg', 'image/jpeg', 'image/gif', // 'image/bmp', 'image/png' ); if ( in_array( $avatartype, $tillatte_typer ) ) { $id = $_SESSION['id']; $fil = explode(".", $avatarnavn); if(count($fil) > 0) $filendelse = $fil[count($fil)-1]; else die("Feil: Filetternavn ikke funnet!"); unset($fil); move_uploaded_file($avataraddr, "v2/images/avatars/" . $avatarnavn); rename("v2/images/avatars/" . $avatarnavn . "", "v2/images/avatars/orig_{$id}.{$filendelse}"); mysql_query("UPDATE users SET avatar = '{$id}.{$filendelse}' WHERE id = {$id}"); // File and new size $filename = "v2/images/avatars/orig_{$id}.{$filendelse}"; $nfilename = "v2/images/avatars/{$id}.{$filendelse}"; $bredde = 80; $hoyde = 80; // Content type switch($avatartype){ case 'image/jpg': case 'image/jpeg': header('Content-type: image/jpg'); $source = imagecreatefromjpeg($filename); break; case 'image/gif': header('Content-type: image/gif'); $source = imagecreatefromgif($filename); break; /* case 'image/bmp': header('Content-type: image/bmp'); $source = imagecreatefrom??($filename); finnes det funksjon for dette? break; */ case 'image/png': header('Content-type: image/png'); $source = imagecreatefrompng($filename); break; default: die("Filtypen støttes ikke!"); } list($width, $height) = getimagesize($filename); // Load $thumb = imagecreatetruecolor($bredde, $hoyde); // Resize imagecopyresized($thumb, $source, 0, 0, 0, 0, $bredde, $hoyde, $width, $height); // Output switch($avatartype){ case 'image/jpg': case 'image/jpeg': imagejpeg($thumb, $nfilename); break; case 'image/gif': imagegif($thumb, $nfilename); break; /* case 'image/bmp': image??($thumb, $nfilename); break; */ case 'image/png': imagepng($thumb, $nfilename); break; } unlink($filename); echo file_get_contents($nfilename); //header('Location: /forum/profile/avatar'); } Lenke til kommentar
Anders Moen Skrevet 8. oktober 2007 Forfatter Del Skrevet 8. oktober 2007 (endret) Oi, nå funka den nesten. Nå ble bildet 80x80px og selve bildet ble igjen på bildet om du skjønner og bakgrunnen ble svart. Fra sånn her: til sånn her: Edit: Så det er fortsatt en liten bug...kan det ha noe med at det der var et transparent gif-bilde kanskje? Edit 2: Prøvde med et "vanlig" jpg-bilde. Det ble resiza uten noen svart bakgrunn iallfall. Selv om grafikken likevel ble ganske dårlig på bildet etter resizing Åssen kan jeg fikse det da mon tro? Og btw, takk for alle de kodene du gadd å skrive! Skal se litt på selve koden og lære litt om hva som gjør hva for å resize bildet når jeg kommer hjem fra jobb (hihi, får litt fri siden jeg måtte på nav og så glemte jeg noe der og nå har de pause og sånn så da får jeg mer fri) Endret 8. oktober 2007 av Anders-Moen Lenke til kommentar
ZoRaC Skrevet 8. oktober 2007 Del Skrevet 8. oktober 2007 Bytt ut imagecopyresized med imagecopyresampled - det bør gi bedre kvalitet. Lenke til kommentar
Anders Moen Skrevet 8. oktober 2007 Forfatter Del Skrevet 8. oktober 2007 Takk! Ble iallfall litt bedre kvalitet nå Nå trenger jeg bare å bli kvitt den svarte bakgrunnen på de transparente bildene, men hvordan? Lenke til kommentar
Gjest Slettet+142 Skrevet 8. oktober 2007 Del Skrevet 8. oktober 2007 (endret) Da har vi i alle fall kommet et steg videre La til en linje som forhåtentligvis skal gjøre den svarte bakgrunnen om til hvit bakgrunn: $avatartype = strtolower($_FILES['img']['type']); $avatarnavn = $_FILES['img']['name']; $avataraddr = $_FILES['img']['tmp_name']; $tillatte_typer = array( 'image/jpg', 'image/jpeg', 'image/gif', // 'image/bmp', 'image/png' ); if ( in_array( $avatartype, $tillatte_typer ) ) { $id = $_SESSION['id']; $fil = explode(".", $avatarnavn); if(count($fil) > 0) $filendelse = $fil[count($fil)-1]; else die("Feil: Filetternavn ikke funnet!"); unset($fil); move_uploaded_file($avataraddr, "v2/images/avatars/" . $avatarnavn); rename("v2/images/avatars/" . $avatarnavn . "", "v2/images/avatars/orig_{$id}.{$filendelse}"); mysql_query("UPDATE users SET avatar = '{$id}.{$filendelse}' WHERE id = {$id}"); // File and new size $filename = "v2/images/avatars/orig_{$id}.{$filendelse}"; $nfilename = "v2/images/avatars/{$id}.{$filendelse}"; $bredde = 80; $hoyde = 80; // Content type switch($avatartype){ case 'image/jpg': case 'image/jpeg': header('Content-type: image/jpg'); $source = imagecreatefromjpeg($filename); break; case 'image/gif': header('Content-type: image/gif'); $source = imagecreatefromgif($filename); break; /* case 'image/bmp': header('Content-type: image/bmp'); $source = imagecreatefrom??($filename); finnes det funksjon for dette? break; */ case 'image/png': header('Content-type: image/png'); $source = imagecreatefrompng($filename); break; default: die("Filtypen støttes ikke!"); } list($width, $height) = getimagesize($filename); // Load $thumb = imagecreatetruecolor($bredde, $hoyde); imagecolorallocate($thumb, 255, 255, 255); // Resize //imagecopyresized($thumb, $source, 0, 0, 0, 0, $bredde, $hoyde, $width, $height); imagecopyresampled($thumb, $source, 0, 0, 0, 0, $bredde, $hoyde, $width, $height); // Output switch($avatartype){ case 'image/jpg': case 'image/jpeg': imagejpeg($thumb, $nfilename); break; case 'image/gif': imagegif($thumb, $nfilename); break; /* case 'image/bmp': image??($thumb, $nfilename); break; */ case 'image/png': imagepng($thumb, $nfilename); break; } unlink($filename); echo file_get_contents($nfilename); //header('Location: /forum/profile/avatar'); } edit: imagecopyresized->imagecopyresampled Endret 8. oktober 2007 av Slettet+142 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå