[PHP] Text over een dynamische afbeelding *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hey,

Ik ben nu andere halve dag aan het zoeken hoe ik een text over een plaatje kan zetten wat ik uit een database haal.

imagefromdb.php
Haalt info uit de database en maakt er een plaatje van. Werkt perfect!
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
if ((isset($Id)) && isset($Checksum)) // when not fake
{
    require_once("connectdb.inc");
    $settable   = "bestanden";
    $query      = "SELECT * FROM $settable WHERE Id=".$Id." AND Checksum='".$Checksum."'";
    $resultpic  = @mysql_query ($query,$db) or die ("Error"); 
    if (@mysql_num_rows($resultpic)>0)
    {
     $data = @mysql_result($resultpic, 0, "Bestandendata");
     $filetype = @mysql_result($resultpic, 0, "FileType");  
     $filename = @mysql_result($resultpic, 0, "Bestandsnaam");  
     header("Content-type: $filetype");  
     header("Content-Disposition: inline; filename=$filename"); 
     echo $data; 
    } 
   else
   {
    echo "Error";
   } // einde 
}
else
{
 echo "Error";
} // illegaal plaatje genomen!


makeimagesold.php
Zou het plaatje van imagefromdb.php moeten inlezen en de text SOLD er overheen moeten zetten.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
header("Content-type: image/jpeg");
header("Content-Disposition: inline; filename=test.jpg");

if (!isset($string))
  { 
   $string = "SOLD";
  }

$font  = 8;
$width  = ImageFontWidth($font) * strlen($string);
$height = ImageFontHeight($font);

// Werkt niet :(          
$afbeelding = "imagefromdb.php.php?Id=".$Id."&Checksum=".$Checksum;   
$im = imagecreatefromjpeg($afbeelding);

// Werkt wel :)
//$im = imagecreatefromjpeg("plaatje.jpg");

//white background
$background_color = imagecolorallocate ($im, 255, 255, 255);

//Red text
$text_color = imagecolorallocate ($im, 255, 255, 255);
imagestring ($im, $font, 80, 80,  $string, $text_color);

imagejpeg ($im);


De error die ik krijg is:
imagecreatefromjpeg(imagefromdb.php?Id=1&Checksum=96fd011c): failed to open stream: Invalid argument on line 15

ik heb al geprobeerd om een fopen functie ertussen te zetten waarbij die het plaatje eerst naar een tempdirectory copied, echter krijg ik daar deze error:
fopen(imagefromdb.php?Id=1&Checksum=96fd011c): failed to open stream: Invalid argument

Het moet toch mogelijk zijn? Er moet toch vast al iemand zijn die dit al een keer is gelukt?

iig thx,

Reano

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Begin sowieso met het uitzetten van de content type headers. Op die manier zie je wat er fout gaat.

Zeer waarschijnlijk wordt het php bestand trechtstreeks ingeladen en gaat dit niet via de webserver. Je php code wordt dus helemaal niet uitgevoerd.

Sowieso kun je beter gebruik maken van imageCreateFromString oid (zie manual voor juiste naam ;) ). Hiermee heb je die tussenstap niet nodig en kun je beide scripts samenvoegen en $data rechtstreeks gebruiken.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Yep... works :)

Thx!

Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Ik wil je wel ff waarschuwen, ik heb zelf ook ooit een systeem gebouwd met foto's in de database, maar als er eenmaal een paar foto's inzitten (>200) wordt de performace snel minder, zelfs iets als
SQL:
1
SELECT foto_id FROM fotos ORDER BY RAND LIMIT 1
kost seconden.