PHP - imagettftext not working and GD installed

37,566

Solution 1

Had the same problem, with FreeType installed, solution was

 $font = "./Arial.ttf"; // <--- put ./ in front of filename

Solution 2

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.

Solution 3

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

Solution 4

I solved this problem with this solution:

$fontfile= __DIR__.'/Fontname.ttf';
Share:
37,566
Admin
Author by

Admin

Updated on July 15, 2022

Comments

  • Admin
    Admin almost 2 years

    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

  • dregad
    dregad about 7 years
    Requirement for Freetype support is documented in PHP manual, see php.net/manual/en/function.imagettftext.php and php.net/manual/en/function.imagettfbbox.php
  • p01ymath
    p01ymath almost 7 years
    Worked for me! Lol! Can you please explain in detail why this works?
  • michi
    michi almost 7 years
    sorry, I have no idea of why this is so!
  • Damiani
    Damiani about 5 years
    adding local path might not be a perfect solution maybe use getcwd() + file name.
  • Veshraj Joshi
    Veshraj Joshi about 5 years
    @Damiani you are absolutely correct, but this path is for the font installed in OS, I will update the answer. Thanks for valuable suggestion
  • Daniel Resch
    Daniel Resch about 4 years
    worked! - but really weird, would also like to know why this is happening?
  • ESP32
    ESP32 almost 4 years
    I even had to add realpath('./Arial.ttf')
  • Kamlesh
    Kamlesh over 3 years
    defined('ROOT_PATH') || define('ROOT_PATH', realpath(dirname(FILE) . '')); $font_path = ROOT_PATH.'/fonts/arial-italic.ttf';