[PHP] tekst in image laden gaat fout

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • HariZ
  • Registratie: December 2000
  • Laatst online: 21-02 15:22
Ik heb een probleempje met het inladen van tekst in een bestaand jpg plaatje.
De manier waarop het wél werkt is:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<? 
header("Content-type: image/jpg");
  $plaatje = imagecreatefromjpeg("plaatje.jpg");
  $white = imagecolorallocate($plaatje, 255,255,0);
  $black = imagecolorallocate($plaatje, 0,0,0);
  $email = "test!";

  imagestring($plaatje, 80, 120, 35, $email, $black);
  imagejpeg($plaatje);
  imagedestroy($plaatje);
?>

Waarbij "Email" de variabele is voor de tekst. Zoals je kunt zien op http://www.fiskaaf.com/harry/ (rechter plaatje), werkt dit prima. Tekst wordt goed ingeladen, plaatje goed weergegeven niets aan de hand. Maar nu wil ik het anders doen, ik wil namelijk een font gebruiken omdat het lettertype dat hij standaard weergeeft niet zo mooi is.

Daarom heb ik de code alsvolgt aangepast:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php 
header("Content-type: image/jpg");
  $plaatje = imagecreatefromjpeg("plaatje.jpg");
  $black = imagecolorallocate($plaatje, 0,0,0);
  $font = "verdana.ttf";
  $email = "test!";
  
  imagettftext($plaatje, 22, 0, 12, 12, $black, $font, $email);
  imagejpeg($plaatje);
  imagedestroy($plaatje);
?>

Deze heb ik ge-upload naar http://www.fiskaaf.com/harry/ (linker plaatje), en geeft dus helemaal niets weer.

Als ik van de regel:
code:
1
$plaatje = imagecreatefromjpeg("plaatje.jpg");

het volgende maak:
code:
1
$plaatje = imagecreate(300,20);

en ik pas de variabelen van de positie van de letters wat aan, dan geeft ie alles keurig weer. Ook als ik alles weghaal behalve het deel van het plaatje inladen, geeft ie prima het plaatje zonder tekst weer. Probleem is dus de combinatie van die twee. Ik heb het al op 2 verschillende servers geprobeerd, beide zonder enig resultaat. Als ik het echter bij een vriend lokaal laat draaien op zijn eigen php server, werd mijn code wél.

Heeft iemand een oplossing voor mij zodat ik op de juiste manier de tekst op het plaatje kan projecteren in het font naar mijn keuze? Ik heb al gesearcht maar kan niets vinden wat mij echt verder helpt, dit topic is dus een beetje de laatste strohalm :)

Acties:
  • 0 Henk 'm!

  • HariZ
  • Registratie: December 2000
  • Laatst online: 21-02 15:22
Heb je mijn bericht eigenlijk überhaupt wel gelezen? Aan die website heb ik dus helemaal niets want wat daar op staat heb ik dus al gebruikt als je goed in mijn php-code had gekeken... Ik kende die website niet, maar ik heb wel die technieken gebruikt...

Acties:
  • 0 Henk 'm!

Verwijderd

Ik herinner me iets dat het font ook in de directory van het plaatjecode.php moest staan

Acties:
  • 0 Henk 'm!

  • HariZ
  • Registratie: December 2000
  • Laatst online: 21-02 15:22
Font werkt opzich wel goed als ik alleen het font weergeef zonder het plaatje erachter. Ben al een klein beetje verder, hij pakt nu wel de php zonder fouten alleen geeft de tekst nog steeds niet weer. Blijkbaar kon hij pure zwarte tekst niet goed verwerken dus heb ik die op 1,1,1 gezet. Code is nu:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?php 
header("Content-type: image/jpg");
  $plaatje = imagecreatefromjpeg("plaatje.jpg");
  $white = imagecolorallocate($plaatje, 255,255,255);
  $black = imagecolorallocate($plaatje, 1,1,1);
  $font = "verdana.ttf";
  $email = "test!";
  
  imagettftext($plaatje, 22, 0, 112, 47, $black, $font, $email);
  imagejpeg($plaatje);
  imagedestroy($plaatje);
?>

En deze geeft dus een kaal plaatje weer zonder de custom tekst erin...

[ Voor 9% gewijzigd door HariZ op 28-12-2003 19:52 ]


Acties:
  • 0 Henk 'm!

  • HariZ
  • Registratie: December 2000
  • Laatst online: 21-02 15:22
Helaas heb ik niet de hulp gekregen waar ik op gehoopt had, maar om mensen die dit probleem ook gaan krijgen te helpen hier dan de code waardoor het mij (eindelijk) lukte om de boel aan de praat te krijgen!

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php 
  // Header, zonder header kan een plaatje niet leven dus geven we hem een header.
header("Content-type: image/jpg");

  // Haal plaatje op dat als achtergrond moet dienen.
  $plaatje = imagecreatefromjpeg("plaatje.jpg");
  
  // Maak een nieuw plaatje aan om de tekst in te plaatsen, deze plaatsen we straks op het
  // hierboven geladen plaatje.
  $plaatjetxt = imagecreate(219,283);
  
  // Set de kleuren wit en zwart voor het ingeladen plaatje.
  $white = imagecolorallocate($plaatje, 255,255,255);
  $black = imagecolorallocate($plaatje, 1,1,1);
  
  // Set de kleuren wit en zwart voor het nieuw gemaakte plaatje.
  $whitetxt = imagecolorallocate($plaatjetxt, 255,255,255);
  $blacktxt = imagecolorallocate($plaatjetxt, 1,1,1);
  
  // Stel het te gebruiken lettertype in, het gekozen lettertype moet natuurlijk wel in de
  // map staan waarin dit bestand thuishoort!
  $font = "verdana.ttf";
  
  // Stel de tekst in die moet worden toegevoegd aan het plaatje.
  $txt = "test!";
  
  // Voeg de tekst toe aan het nieuw gemaakte plaatje. Stel ook kleur en positie hier in.
  imagettftext($plaatjetxt,22,0,112,47,$blacktxt,$font,$txt);

  // Stel in welke kleur transperant moet worden op het nieuw gemaakte plaatje met tekst.
  // LET OP: Deze moet dus gelijk zijn aan de kleur die is ingesteld bij $whitetxt!!!
  imagecolortransparent($plaatjetxt,imagecolorexact($plaatjetxt,255,255,255)); 
  
  // Zoek de hoogte en breedte van het nieuw gemaakte plaatje
  $insert_x = imagesx($plaatjetxt); 
  $insert_y = imagesy($plaatjetxt); 

  // Voeg nieuw gemaakte plaatje ($plaatjetxt) en het bestaande plaatje ($plaatje) samen.
  // Denk eraan dat het bestaande plaatje eerst moet!
  imagecopymerge($plaatje,$plaatjetxt,0,0,0,0,$insert_x,$insert_y,100); 

  // Maak van het plaatje een jpg afbeelding en geef kwaliteit op.
  imagejpeg($plaatje,'',100);
  imagedestroy($plaatje);
?>
Pagina: 1