login  Naam:   Wachtwoord: 
Registreer je!
 Forum

GD lib: tekst op afbeelding

Offline Frederic - 04/05/2005 12:28
Avatar van FredericPHP ver gevorderde Ik heb een afbeelding (button) van 196x21 pixels. Nu zou ik graag er tekst op plaatsen, die ik met de URL dan erop kan zetten afbeelding.php?opschrift=Sitemasters... Maar kan iemand me zeggen hoe ik hieraan moet beginnen, dat de tekst (hoe lang die ook is) gecentreerd wordt op de afbeelding (heeft dus fixed breedte)? Ik heb lange tijd dit script gebruikt, maar dan past ie de breedte van de afbeelding aan aan de lente van de tekst...
  1. <?
  2. $tekst or die("<font face=\"Arial, Helvetica, sans-serif\">Er is geen tekst opgegeven om op de afbeelding te plaatsen...</font>"); // er moet tekst worden gepost anders afbreken
  3. $hoogte = 28; // hoe hoog is de afbeelding in pixels
  4. $breedte_kanten = 10; // hoe breed is de linker en rechter kant
  5. $marge_kanten = 0; // hoe dicht mag de tekst bij de linker en rechter kant staan
  6. $breedte_midden = 5; // wat is de breedte van de middelste image
  7.  
  8. $links = "links.png"; // Linkerkant van de image
  9. $midden = "midden.png"; // Midden van de image dit is het stuk waar op geprint word
  10. $rechts = "rechts.png"; // Rechterkant van de image
  11.  
  12. $lettertype = "/Trebuchet.ttf"; // Selecteer font om op image te printen
  13.  
  14. $lettergrootte = 12; // Geef hier de groote aan in pixels
  15. //Calculeren
  16. $tekst = stripslashes($tekst);
  17. $tekst_box = imagettfbbox($lettergrootte, 0, $lettertype, $tekst);
  18. $tekst_breedte = $tekst_box[2] - $tekst_box[0];
  19. $afbeelding_breedte = $tekst_breedte + 2 * ($breedte_kanten - $marge_kanten);
  20.  
  21. $afbeelding_output = ImageCreate($afbeelding_breedte, $hoogte) or die("Kan geen afbeelding maken");
  22. $afbeelding_links = ImageCreateFromPNG($links) or die("Kan linkerzijde niet openen : $links");
  23. $afbeelding_midden = ImageCreateFromPNG($midden) or die("Kan middelste gedeelte niet openen : $midden");
  24. $afbeelding_rechts = ImageCreateFromPNG($rechts) or die("Kan rechterzijde niet openen : $rechts");
  25. for ($i =0; $i < $afbeelding_breedte / $breedte_midden; $i++) {
  26. ImageCopy($afbeelding_output, $afbeelding_midden, $i * $breedte_midden, 0, 0, 0, $breedte_midden, $hoogte);
  27. }
  28. ImageCopy($afbeelding_output, $afbeelding_links, 0, 0, 0, 0, $breedte_kanten, $hoogte);
  29. ImageCopy($afbeelding_output, $afbeelding_rechts, $afbeelding_breedte - $breedte_kanten, 0, 0, 0, $breedte_kanten, $hoogte);
  30. for($i = 0; $i < imagecolorstotal($afbeelding_output); $i++) {
  31. $colors = ImageColorsForIndex($afbeelding_output, $i);
  32. $hsv = rgb2hsv($colors['red'], $colors['green'], $colors['blue']);
  33. $hue = $hsv[0];
  34. $sat = $hsv[1];
  35. $val = $hsv[2];
  36. $hue += $huerotation;
  37. $rgb = hsv2rgb($hue, $sat, $val);
  38. $rood = $rgb[0];
  39. $groen = $rgb[1];
  40. $blauw = $rgb[2];
  41. ImageColorSet($afbeelding_output, $i, $rood, $groen, $blauw);
  42. }
  43. $tekstkleur = ImageColorAllocate($afbeelding_output, 102, 102, 102);
  44. ImageTTFText($afbeelding_output, $lettergrootte, 0, $breedte_kanten - $marge_kanten, 19, $tekstkleur, $lettertype, $tekst);
  45.  
  46. header("Content-Type: image/png");
  47. ImagePng($afbeelding_output);
  48.  
  49. function hsv2rgb($h, $s, $v) {
  50.  
  51. if ($s == 0) {
  52. $r = $g = $b = $v;
  53. return array($r * 255, $g * 255, $b * 255);
  54. }
  55. $h %= 360;
  56. $h /= 60;
  57. $i = floor($h);
  58. $f = $h - $i;
  59. $p = $v * (1 - $s);
  60. $q = $v * (1 - $s * $f);
  61. $t = $v * (1 - $s * (1 - $f));
  62.  
  63. switch($i) {
  64. case 0:
  65. $r = $v;
  66. $g = $t;
  67. $b = $p;
  68. break;
  69. case 1:
  70. $r = $q;
  71. $g = $v;
  72. $b = $p;
  73. break;
  74. case 2:
  75. $r = $p;
  76. $g = $v;
  77. $b = $t;
  78. break;
  79. case 3:
  80. $r = $p;
  81. $g = $q;
  82. $b = $v;
  83. break;
  84. case 4:
  85. $r = $t;
  86. $g = $p;
  87. $b = $v;
  88. break;
  89. default:
  90. $r = $v;
  91. $g = $p;
  92. $b = $q;
  93. break;
  94. }
  95.  
  96. return array($r * 255, $g * 255, $b * 255);
  97.  
  98.  
  99. }
  100.  
  101.  
  102. function rgb2hsv($red, $green, $blue) {
  103.  
  104. $r = $red / 255;
  105. $g = $green / 255;
  106. $b = $blue / 255;
  107.  
  108. $min = min($r, $g, $b);
  109. $max = max($r, $g, $b);
  110.  
  111. $v = $max;
  112.  
  113. $delta = $max - $min;
  114.  
  115. if ($max != 0) {
  116. $s = $delta / $max;
  117. } else {
  118. $s = 0;
  119. $h = -1;
  120. return array($h, $s, $v);
  121. }
  122.  
  123.  
  124. if ($delta) {
  125.  
  126. if ($r == $max) {
  127. $h = ($g - $b) / $delta;
  128. } else if ($g == $max) {
  129. $h = 2 + ($b - $r) / $delta;
  130. } else {
  131. $h = 4 + ($r - $g) / $delta;
  132. }
  133.  
  134. } else {
  135. $h = 0;
  136. }
  137.  
  138. $h *= 60;
  139.  
  140. if ($h < 0) {
  141. $h += 360;
  142. }
  143.  
  144. return array($h, $s, $v);
  145.  
  146. }
  147. ?>

7 antwoorden

Gesponsorde links
Offline Maarten - 04/05/2005 12:36
Avatar van Maarten Erelid http://www.site...mp;id=2775
Offline xSc - 04/05/2005 12:36 (laatste wijziging 04/05/2005 13:30)
Avatar van xSc Onbekend $tekst or die("<font face=\"Arial, Helvetica, sans-serif\">Er is geen tekst opgegeven om op de afbeelding te plaatsen...</font>"); // er moet tekst worden gepost anders afbreken

Waar slaat dit op dan?

  1. <?php
  2.  
  3. if (trim($tekst)) == '')
  4. {
  5.  
  6. echo 'Er is geen tekst opgegeven';
  7.  
  8. }
  9. else
  10. {
  11.  
  12. // ga door
  13.  
  14. }
  15. ?>

Leer alsjeblieft dat 'zomaar-or-die()-gebruiken' af. Werk liever met if/else constructies.
Offline Frederic - 04/05/2005 13:27 (laatste wijziging 04/05/2005 13:27)
Avatar van Frederic PHP ver gevorderde Wat klopt hier nu niet aan?
  1. <?php
  2. header("Content-type: image/png");
  3. $text = $_GET['tekst'];
  4. $font = "/Trebuchet.ttf"; // Selecteer font om op image te printen
  5.  
  6. $txt_box=imageftbbox(60,0,$font,$text);
  7. $txt_width=$txt_box[4]-$txt_box[0];
  8. $left=round((470-$txt_width)/2,0);
  9.  
  10. imagettftext("a.jpg", 13, 0, $left, 3, $kleur, $font, $text);
  11.  
  12. imagepng($im);
  13. imagedestroy($im);
  14. ?>

Citaat:
Warning: imagettftext(): supplied argument is not a valid Image resource
Warning: imagepng(): supplied argument is not a valid Image resource
Warning: imagedestroy(): supplied argument is not a valid Image resource

De afbeelding bestaat zeker, en ik heb toch ook alle parameters!
Offline ikkedikke - 04/05/2005 13:50 (laatste wijziging 04/05/2005 13:51)
Avatar van ikkedikke PHP expert volgens mij moet die eerste parameter van imagettftext() een resource zijn van imagecreatefrompng()
Offline Frederic - 04/05/2005 17:25
Avatar van Frederic PHP ver gevorderde hoezo, ik hoef toch geen png te maken? ik heb er toch al eentje?
Offline NCube - 04/05/2005 17:46
Avatar van NCube HTML beginner
  1. <?php
  2. header("Content-type: image/png");
  3. $text = $_GET['tekst'];
  4. $font = "/Trebuchet.ttf"; // Selecteer font om op image te printen
  5.  
  6. $im = imagecreatefromjpeg("a.jpg"); //Dit is veranderd
  7.  
  8. $txt_box=imageftbbox(60,0,$font,$text);
  9. $txt_width=$txt_box[4]-$txt_box[0];
  10. $left=round((470-$txt_width)/2,0);
  11.  
  12. imagettftext($im, 13, 0, $left, 3, $kleur, $font, $text); //De "a.jpg" vervangen door $im
  13.  
  14. imagepng($im);
  15. imagedestroy($im);
  16. ?>

Je moet eerst een image resource maken en die gebruiken in imagettftext.
Offline Frederic - 04/05/2005 18:00 (laatste wijziging 04/05/2005 21:10)
Avatar van Frederic PHP ver gevorderde Dit is de link naar de afbeelding, maar wat ik ook doe, ik krijg de tekst niet juist gepositioneerd!
http://www.fadetolife.be/as.php?tekst=frederic
Dit is het script:
  1. <?php
  2. header("Content-type: image/png");
  3. $text = $_GET['tekst'];
  4. $font = "/Trebuchet.ttf";
  5. $im = imagecreatefromjpeg("a.jpg");
  6.  
  7. $txt_box=imageftbbox(60,0,$font,$text);
  8. $txt_width=$txt_box[4]-$txt_box[0];
  9. $left=round((203-$txt_width)/2,0);
  10.  
  11. imagettftext($im, 13, 0, $left, 15, $kleur, $font, $text);
  12.  
  13. imagepng($im);
  14. imagedestroy($im);
  15. ?>


//EDIT: of als iemand me kan zeggen hoe de breedte van een tekst te berekenen ben ik ook al blij! Dan is het makkelijk uit te vissen wat de x-afstand moet zijn!
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.258s