8

It's being long hours that I'm still looking for answer to this problem.. All the solutions I find are around catching the font name but I am pretty sure this isn't my problem.

It looks like GD is installed

array(11) {
  ["GD Version"]=>
  string(27) "bundled (**2.0.34 compatible**)"
  ["FreeType Support"]=>
  bool(false)
  ["T1Lib Support"]=>
  bool(false)
  ["GIF Read Support"]=>
  bool(true)
  ["GIF Create Support"]=>
  bool(true)
  ["JPEG Support"]=>
  bool(true)
  ["PNG Support"]=>
  bool(true)
  ["WBMP Support"]=>
  bool(true)
  ["XPM Support"]=>
  bool(true)
  ["XBM Support"]=>
  bool(true)
  ["JIS-mapped Japanese Font Support"]=>
  bool(false)
}

Above you can see my GD support. My PHP version is 5.3 and I'm running on Linux.

I have tried few different code examples from different websites and none works. ImageString does work for me but I need to get imagettftext to work..

This is the last code I have tried now-

<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);

// Set the content-type
header('Content-Type: image/png');

// Create the image
$im = imagecreatetruecolor(400, 100) or die("Can't create image!");

// Create some colors
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);

// The text to draw
$text = 'Testing';
// Replace path by your own font path
$font = 'arial.ttf';

// Add some shadow to the text
imagettftext($im, 20, 0, 11, 21, $grey, 'arial.ttf', $text);

// Add the text
imagettftext($im, 20, 0, 10, 20, $black, 'arial.ttf', $text);

// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
?>

Result: http://www.7679679.com/app/test-ansi.php

user2736738
  • 28,590
  • 4
  • 37
  • 52
Steve Peretz
  • 81
  • 1
  • 1
  • 2
  • If you set header... just before imagepng, what errormsg do you get? – michi Feb 21 '13 at 10:40
  • Does php give you any error/notice? What does `imagettftext` function return? It should returns array of points or false on error. try `$text_result = imagettftext(...); if($text_result===false){echo("ERROR");}else print_r($text_result);`. Another thing, when you are filling your newly created image, you left one pixel on height and filled only 29 pixels of 100 on width, is that on purpose? – Buksy Feb 21 '13 at 10:45
  • how did you print that array??? – Saswat Mar 15 '13 at 14:37
  • please consider to accept an answer (click tick mark on the left) if it actually answered your question – michi Apr 14 '13 at 13:01

5 Answers5

20

Had the same problem, with FreeType installed, solution was

 $font = "./Arial.ttf"; // <--- put ./ in front of filename
michi
  • 6,486
  • 4
  • 31
  • 52
8

Notice you don't have Free Type installed:

["FreeType Support"]=>
  bool(false)

This function requires both the GD library and the » FreeType library.

You will need to install Free Type library before you can use this function.

try installing these package:s freetype, freetype-devel

If you compiled PHP you can make sure you added enabled freetype during compile time:

--with-freetype-dir=/usr/include/freetype2/ --with-freetype

Or if you using something such as YUM or APT-GET it should be really simple to install those libraries, and a quick search ob google with get you started.

Andrew
  • 12,212
  • 1
  • 30
  • 45
  • Requirement for Freetype support is documented in PHP manual, see http://php.net/manual/en/function.imagettftext.php and http://php.net/manual/en/function.imagettfbbox.php – dregad Apr 28 '17 at 09:11
7

Well i also got problem around

$font='arial.tff'; 

I think you should provide absolute path to the $font like

$font="c:/windows/fonts/arial.ttf";

i assume you are a windows user. and remove

header('Content-Type:image/png');

to get the real error

Jobin
  • 7,778
  • 1
  • 29
  • 50
Veshraj Joshi
  • 3,128
  • 2
  • 20
  • 35
  • 2
    adding local path might not be a perfect solution maybe use getcwd() + file name. – Damiani May 12 '19 at 08:24
  • @Damiani you are absolutely correct, but this path is for the font installed in OS, I will update the answer. Thanks for valuable suggestion – Veshraj Joshi May 13 '19 at 02:36
3

I solved this problem with this solution:

$fontfile= __DIR__.'/Fontname.ttf';
izmir_LEE
  • 109
  • 1
  • 2
0

Andrew is right, the php manual for imagettftext states FreeType is required to use imagettftext, imagettfbox, and others. Most people the GD devel package will install FreeType automatically:

Fedora/Redhat:

yum install gd gd-devel php-gd

Debian/Ubuntu:

apt-get install php5-gd libgd2-xpm libgd2-xpm-dev

This error was probably in your logs:

PHP Fatal error:  Call to undefined function imageTTFText()
im3r3k
  • 505
  • 1
  • 7
  • 14