CruellaDeVille Skrevet 18. april 2006 Del Skrevet 18. april 2006 Jeg har laget en bildedatabase, hvor jeg legger inn og henter ut bilder (funker fint). Men - jeg har lyst å gjøre en av to ting: enten resize bilde FØR det legges i databasen (max 400x400) eller lage en thumbs når bildet hentes ut igjen. Noen av bildene er ENORME, og jeg har så langt satt begrensning i img-tag i tabellen min. Problemet er at jeg ikke skjønner hva imagecreatefromstring gjør. Slik jeg forstår det leser den en strøm av streng (slik innholdet i binary_data fra databasen min er) og lager et bilde ut av det, men jeg får bare feilmeldinger Og jeg skjønner ikke hva de betyr (eller jo - skjønner hva de betyr, men ikke hvorfor de kommer) Så litt kode: filen img.php (den som viser bilder) <?php include('functions.php'); $id = $_GET['id']; connect() or die(mysql_error()); $sql = query("select id, filetype, binary_data from binary_data", " where id = '{$id}'") or die(mysql_error()); $result = readArray($sql); header("Content-type : {$result['type']}"); $data = base64_decode($result['data']); $data = resize($data); //<-- det er her det tuller seg print $data; ?> Så funksjonen hvor jeg vil resize function resize($image){ define("MAX_WIDTH" , 100); define("MAX_HEIGH", 100); $img = imagecreatefromstring($image); //<- er ikke streng sier parser # Get image size and scale ratio $width = imagesx($img); // <-dermed finnes ikke denne $height = imagesy($img); //<- eller denne //print $width . " " . $height; $scale = min(MAX_WIDTH/$width, MAX_HEIGHT/$height); //print $scale; if ($scale < 1) { $new_width = floor($scale*$width); $new_height = floor($scale*$height); //print $new_width . " " . $new_height; # Create a new temporary image $tmp_img = imagecreatetruecolor($new_width, $new_height); # Copy and resize old image into new image imagecopyresized($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height); imagedestroy($img); $img = $tmp_img; } return $img; } og til sist feilmeldingene Warning: imagecreatefromstring() [function.imagecreatefromstring]: Empty string or invalid image in C:\wamp\www\imageToDatabase\functions.php on line 39 Warning: imagesx(): supplied argument is not a valid Image resource in C:\wamp\www\imageToDatabase\functions.php on line 41 Warning: imagesy(): supplied argument is not a valid Image resource in C:\wamp\www\imageToDatabase\functions.php on line 42 Warning: Division by zero in C:\wamp\www\imageToDatabase\functions.php on line 44 Warning: Division by zero in C:\wamp\www\imageToDatabase\functions.php on line 44 Warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in C:\wamp\www\imageToDatabase\functions.php on line 53 Warning: imagecopyresized(): supplied argument is not a valid Image resource in C:\wamp\www\imageToDatabase\functions.php on line 57 Warning: imagedestroy(): supplied argument is not a valid Image resource in C:\wamp\www\imageToDatabase\functions.php on line 58 Slik jeg forstår det er ikke binary_data en streng, slik jeg forstår det, og det er ikke mulig å hente ut imagesx og imagesy fra strengen. Men jeg har gjort slik eksempelet på php.net viser ( http://no.php.net/manual/en/function.image...efromstring.php , litt nede på siden, kode i fin farge) Tror jeg iallfall Anyone? Lenke til kommentar
???????? Skrevet 18. april 2006 Del Skrevet 18. april 2006 Hvis jeg forstår deg rett så lagrer du selve bildet i databasen? I så fall skal du ikke bruke imagecreatefromstring, men rett og slett kun sette Header ("Content-type: --hent typen fra database---"); echo $row['feltet_med_bildet']; Så vises bildet. Lenke til kommentar
CruellaDeVille Skrevet 18. april 2006 Forfatter Del Skrevet 18. april 2006 Hvis jeg forstår deg rett så lagrer du selve bildet i databasen?I så fall skal du ikke bruke imagecreatefromstring, men rett og slett kun sette Header ("Content-type: --hent typen fra database---"); echo $row['feltet_med_bildet']; Så vises bildet. 5945861[/snapback] poenget er at noen av bildene i databasen er 1200xett_eller_annet og så langt har jeg satt størrelsesbegrensningen i html (<img src="" heigh="100" width="100") men på den måten blir noen av bildene "litt" forvrengt Jeg vil resize de før jeg viser de, slik at de blir maks 100x100 og beholder sitt aspect ratio (hva nå enn det heter på norsk) Lenke til kommentar
trondes Skrevet 18. april 2006 Del Skrevet 18. april 2006 hmm... et lite tips kanskje brukt function resize(&$image) så spiser den ikke opp så mye minne. eller tenker jeg helt feil nå.. en annen ting... $data = base64_decode($result['data']); du henter vel ikke ut noe "data" fra tabelen din vel Du sier: "select id, filetype, binary_data from binary_data" men ingen "data"... Lenke til kommentar
CruellaDeVille Skrevet 19. april 2006 Forfatter Del Skrevet 19. april 2006 hmm... et lite tips kanskje brukt function resize(&$image) så spiser den ikke opp så mye minne. eller tenker jeg helt feil nå.. en annen ting... $data = base64_decode($result['data']); du henter vel ikke ut noe "data" fra tabelen din vel Du sier: "select id, filetype, binary_data from binary_data" men ingen "data"... 5946228[/snapback] jeg sier $data = readArray($sql) og i funksjonen readArray() lager jeg en array med resultater fra spørringen slik: function readArray($sql){ while($resultat = mysql_fetch_array($sql)){ $returndata['id'] = $resultat['id']; $returndata['data'] = $resultat['binary_data']; $returndata['type'] = $resultat['filetype']; } return $returndata; } Jeg aner virkelig ikke hva base64_decode gjør, men fyren på php.net gjorde det, så jeg tenkte det måtte være med Lenke til kommentar
trondes Skrevet 19. april 2006 Del Skrevet 19. april 2006 (endret) aha... nei.. dvs så lenge du ikke har brukt base64_encode() når du la den inn i databasen så skal du ikke bruke base64_decode(). Eneste grunnen til at det ble brukt på php.net er at $data strengen der er base64_encode(). Dvs at teksten som blir kjørt igjennom base64_encode() blir omgjort fra binær data til vanlig tekst, som du feks kan sende med en email. Så du skal i ditt eksempel ikke kjøre den gjennom noen base64_decode() EDIT: CruellaDeVille du må prøve deg frem, ikke vært redd for å gjør ting litt anneleddes en hva som står på php.net, eller det vi sier her Endret 19. april 2006 av trondes Lenke til kommentar
arian88 Skrevet 19. april 2006 Del Skrevet 19. april 2006 hehe jeg veit ikke om det hjelper deg eller ikke søkte det på nette fant det som du veit jeg er ikke så god i php så jeg veit ikke det er akkurat det du letter etter eller ikke http://forum.ceviz.net/archive/index.php/t-23752.html Lenke til kommentar
CruellaDeVille Skrevet 19. april 2006 Forfatter Del Skrevet 19. april 2006 hehejeg veit ikke om det hjelper deg eller ikke søkte det på nette fant det som du veit jeg er ikke så god i php så jeg veit ikke det er akkurat det du letter etter eller ikke http://forum.ceviz.net/archive/index.php/t-23752.html 5946785[/snapback] Hmmm, plutselig stod det klart for meg hvorfor en bør bruke engelsk når en programmerer. Det ligner veldig på det jeg leter etter, men siden jeg ikke forstår ungarsk (eller hva det var) så vet jeg ikke om personen sier "hva er galt med koden" eller "her er en kode som funker" Lenke til kommentar
NH Skrevet 19. april 2006 Del Skrevet 19. april 2006 det du eventuelt kan gjøre er å lagre bildet fra db inn i en tempfil for så hente den ut med imagecreatefromJPEG/GIF/PNG eventuelt som du nevnte resize før du lagrerbildet. (burde ikke by på store problemer) Lenke til kommentar
trondes Skrevet 19. april 2006 Del Skrevet 19. april 2006 eventuelt som du nevnte resize før du lagrerbildet. (burde ikke by på store problemer) 5951875[/snapback] Er vel kanskje det beste, da er det gjort. Slipper å tenke på det når brukeren skal se på bildene. Lenke til kommentar
anbe4 Skrevet 19. april 2006 Del Skrevet 19. april 2006 I galleriet mitt resizer jeg bildene før de blir lagra. Det gør jobben lettere for serveren, fordi den da slipper å resize bilde til hver bruker, men kun gjøre det når brukeren laster opp. En annen fordel er at små bilder tar mye mindre plass på serveren. Lenke til kommentar
CruellaDeVille Skrevet 19. april 2006 Forfatter Del Skrevet 19. april 2006 I galleriet mitt resizer jeg bildene før de blir lagra. Det gør jobben lettere for serveren, fordi den da slipper å resize bilde til hver bruker, men kun gjøre det når brukeren laster opp. En annen fordel er at små bilder tar mye mindre plass på serveren. 5952093[/snapback] lagrer du de i database eller i filsystem? Hvis du gjør det første vil jeg gjerne vite hvordan du gjorde det! Lenke til kommentar
trondes Skrevet 19. april 2006 Del Skrevet 19. april 2006 lagrer du de i database eller i filsystem? Hvis du gjør det første vil jeg gjerne vite hvordan du gjorde det! 5952487[/snapback] Har du ikke klart det da ? Hmm.. fortsatt problem ,installer det her så kan jeg se på det 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å