Gå til innhold

imagecreatefromstring og binærdata


Anbefalte innlegg

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
Videoannonse
Annonse
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

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
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 :hmm:

Lenke til kommentar

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 av trondes
Lenke til kommentar
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 :p

 

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

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
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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...