Behandla bilder med GD och mata in i databas

Tråden skapades och har fått 14 svar. Det senaste inlägget skrevs .
1
  • Oregistrerad
  • 2004-11-26 05:05

Hejsan!

Försöker luska ut hur jag skall få data till databasen. Skall skapa en thumbnaiil med GD. Verkar funka men jag får inte fram data. Det scriptet jag följt när jag kodade sparade i en vald URL och visade biilden i samma fönster.

Så här ser koden ut. Får variabler hur stor thumbnailen skall vara tidigare i scriptet.

$srcimg = ImageCreateFromJPEG($_FILES['file']['tmp_name']); // srcimg

	$destimg = ImageCreate($new_width,$new_height); // destimg

	ImageCopyResized($destimg,$srcimg,0,0,0,0,$new_width,$new_height,ImageSX($srcimg),ImageSY($srcimg)); 

	ImageJPEG($destimg,'',50); 

Sista raden är ju spar och visningen. Vill ha en sträng i stället som skall in i databasen. Samma som

$file_w = addslashes(fread(fopen($_FILES['file']['tmp_name'], "rb"), filesize($_FILES['file']['tmp_name'])));

ger.

Hjäääälp! Huvudet exploderar snart. Vet inte hur många timmar jag suttit för att få det så här långt.

Ska du lägga inte själva bilden i databasen?

Eller vill du skriva den till en fil?

Edit: imagejpeg har ett filnamnsargument:
bool imagejpeg ( resource image [, string filename [, int quality]])

Så i fallet ovan skriv:

// spara bilden till filen fil.jpeg
imagejpeg ($destimg, fil.jpg, 50);

Glöm nedanstående:
Jag har för mig att imagejpeg() strömmar ut bilddatan, och vill du fånga den (om det är så) måste du använda outputbuffer enl:

//Starta buffring av output
ob_start();

// strömma ut bilden
Imagejpeg($im);
..
//Läs in din buffert
$buffer = ob_get_contents();

//rensa cachen/bufferten
ob_end_clean();

du har nu bilddatan i $buffer.

Mer information hittar du här:
http://se2.php.net/imagejpeg

  • Oregistrerad
  • 2004-11-26 23:25

Det var det undre jag menade Behöver bilddatan som en variabel som jag kan trycka in i databasen. Har varit inne ett otal gånger på php.net. Skall prova det du skrev. Tack för hjälpen!

Jag skulle ändå rekommendera att spara det som separata filer.

Dels är det "god sed" att inte spara binärdata i databasen, dels har du dina filer tillgängliga på ett mer fysiskt sätt än om de ligger i databasen, och det är enklare att göra en backup på det hela.

Jag skulle, och gör så även i det bildgalleri jag säljer, spara varje bild som en fil.

mvh

/.scooter

  • Oregistrerad
  • 2004-11-28 05:42

Fick det till att fungera. Men sicket skit. Riktigt dåliga thumbnail. Så mycket slit för ingenting. Har alla servrar möjlighet till att få en skrivbar mapp? Hur ställer man in det? Hade ju varit smidigare att få det så. Har för mig att jag har uppskrivet hur man får en fil genom formuläret, men är tackasam för en genomgång.

Använd imagecopyresampled istället för imagecopyresized.

http://se.php.net/imagecopyresampled

  • Oregistrerad
  • 2004-11-29 19:06

Funkade bättre med imagecopyresize. Fast skärpan försvann. Verkar som om den har problem med att göra skarpa små tumnaglar. Gör jag en större bild av en högupplöst blir det bra men inte när den blir max 150 px som jag tänkt. har varit lärorikt att krångla med detta. Hade inte en aning om vad som reurnerades av dom olika $_FILES varianterna och vad som behövdes när man matade in i DB respektive sparade ner till fil. Lite har man lärt sig, även om det inte var till full nytta än Men tack för svaren scooterbabe! Nu vet jag vem jag skall terra när jag fastnat

Funkade inte imagecopyresampled?

  • Oregistrerad
  • 2004-11-30 19:34

Ursäkta, tänkte rätt men skrev fel. Var imagecopyressampled jag menade. Blev lite suddigare fast hellre det än pixligheten från den andra. Sedan fick jag bukt med färgerna genom att lägga in ImageCreatetruecolor. Blev en väldig skilnad i kvalitet. Vet du om det finns något för skärpan i GD?

Det finns det inte - testa att öka från 50 till 80 i kvalitet - det hjälper nog.

  • Oregistrerad
  • 2004-12-01 18:42

Kör med 100. Funkar som sagt bra när tumnaglarna är stora men inte i 90*150 som jag vill ha dom. Tyvärr så är kunderna sill största delen fotografer så dom vill ha felfria bilder :\

  • Medlem
  • Stockholm
  • 2004-12-02 11:02

Imagemagick

Använder du Imagemagick istället finns det nog lite större möjligheter. Här är en kodsnutt ur den funktion som jag kör med för att skapa tumnaglar:

// IM 5.5 version
exec(
  $path."/convert -size ".$size."x".$size." $file -resize ".$size."x".$size." ".
  "-unsharp 0.9x0.7+1.0+0.02 -quality 85 +profile \"*\" ".$newFile
);

// IM 5.2.2 version
exec(
  $path."/convert -size ".$size."x".$size." $file -scale ".$size."x".$size." ".
  "-quality 90 ".$newFile
);

$path - sökväg till katalogen där IM-binärerna ligger, t ex "/usr/bin"
$size - maximal pixelstorlek
$file - sökväg till bildfilen
$newFile - sökväg till nya tumnageln

Det finns två inställningar som bara finns i IM 5.5: -unsharp och +profile.
"-unsharp" är en motsvarighet till Oskarp mask i PS.
"+profile" tar bort ev inbäddade färgprofiler för att hålla storleken nere.

Vill du sedan lägga in bilden i en databas så får du läsa in filen med php och sen radera den.

  • Oregistrerad
  • 2004-12-02 19:26

skall kolla med webbhotellet om Imagemagick finns installerat. Skall bli intressant att prova skillnaden.

  • Oregistrerad
  • 2004-12-02 19:32

Supported image formats = TMP ??? Vaee? Men det skall funka i alla fall. Version 6.0.6 skall väll inte göra någon skillnad på hur du gjorde i 5.2.2 varianten?

  • Medlem
  • Stockholm
  • 2004-12-03 11:02

Vet inte hur det är i det här fallet, men oftast försöker de väl göra så att gamla funktioner funkar på samma sätt i nya versioner, även om det tillkommer ny funktionalitet.

1
Bevaka tråden