Моя проблема была неправильным смещением. На изображении не было ничего, ни текста, ни ошибок в исходном коде, просто пустой файл. Пути были правильными. Я думал, что в шрифте ttf произошла ошибка, но оказалось, что это было неправильное позиционирование.
Вот что помогло мне увидеть немного текста:
imagettftext($im, 20, 0, 20, 20, $fg, $font, $text);
Это показывает немного текста в правом верхнем углу.
Полный рабочий код:
putenv('GDFONTPATH=' . dirname(__FILE__));
$font = 'arial'; // located next to the script
imagettftext($im, 20, 0, 20, 20, $fg, $font, $text);