PHP Conference Japan 2024

imageloadfont

(PHP 4, PHP 5, PHP 7, PHP 8)

imageloadfontЗагрузка шрифта

Описание

imageloadfont(string $filename): GdFont|false

imageloadfont() загружает определённый пользователем шрифт и возвращает его идентификатор.

Список параметров

filename

Формат файла шрифта двоичный и зависит от архитектуры системы. Это означает необходимость генерировать файл шрифта на том же процессоре, на котором работает PHP.

Формат файла шрифта
позиция байта тип данных C описание
байты 0-3 int количество символов в шрифте
байты 4-7 int значение первого символа в шрифте (часто 32 - пробел)
байты 8-11 int ширина пиксела каждого символа
байты 12-15 int высота пиксела каждого символа
байты 16- char массив с данными символов, один байт на пиксел в каждом символе. Для всех кол-во*высота*ширина байт.

Возвращаемые значения

Возвращает экземпляр GdFont или false, если возникла ошибка. Идентификатор шрифта, который всегда больше 5 для предотвращения конфликтов со встроенными шрифтами, либо false в случае возникновения ошибки.

Список изменений

Версия Описание
8.1.0 Возвращает экземпляр GdFont; ранее возвращалось целое число (int).

Примеры

Пример #1 Пример использования imageloadfont()

<?php
// Создание нового изображения
$im = imagecreatetruecolor(50, 20);
$black = imagecolorallocate($im, 0, 0, 0);
$white = imagecolorallocate($im, 255, 255, 255);

// Белый фон
imagefilledrectangle($im, 0, 0, 49, 19, $white);

// Загрузка gd шрифта и надпись 'Привет'
$font = imageloadfont('./04b.gdf');
imagestring($im, $font, 0, 0, 'Привет', $black);

// Вывод изображения
header('Content-type: image/png');

imagepng($im);
imagedestroy($im);
?>

Смотрите также

Добавить

Примечания пользователей 3 notes

up
5
siker at norwinter dot com
19 years ago
Working under the assumption that the only 'architecture dependant' part of the font files is endianness, I wrote a quick and dirty Python script to convert between the two. It has only been tested on a single font on a single machine so don't bet your life on it working. All it does is swap the byte order of the first four ints.

#!/usr/bin/env python

f = open("myfont.gdf", "rb");
d = open("myconvertedfont.gdf", "wb");

for i in xrange(4):
b = [f.read(1) for j in xrange(4)];
b.reverse();
d.write(''.join(b));

d.write(f.read());

I successfully used this script to convert anonymous.gdf, from one of the font links below, into something useable on Mac OS X.
up
1
alex at bestgames dot ro
19 years ago
Confirmation code generation for preventing automated registrations on a website.

Function arguments are:
$code - the code that you shall random generate
$location - relative location of the image that shall be generated
$fonts_dir - relative location for the GDF fonts directory

This function will create an image with the code given by you and will save it in the directory specified with the name formed by MD5 hash of the code.

You may insert as many font types in the fonts directory as you wish, with random names.

<?php
function generate_image($code, $location, $fonts_dir)
{
$image = imagecreate(150, 60);
imagecolorallocate($image, rand(0, 100), rand(100, 150), rand(150, 250));
$fonts = scandir($fonts_dir);

$max = count($fonts) - 2;

$width = 10;
for (
$i = 0; $i <= strlen($code); $i++)
{
$textcolor = imagecolorallocate($image, 255, 255, 255);
$rand = rand(2, $max);
$font = imageloadfont($fonts_dir."/".$fonts[$rand]);

$fh = imagefontheight($font);
$fw = imagefontwidth($font);

imagechar($image, $font, $width, rand(10, 50 - $fh), $code[$i], $textcolor);
$width = $width + $fw;

}

imagejpeg($image, $location."/".md5($code).".jpg", 100);
imagedestroy($image);

return
$code;

}

?>
up
0
matthew at exanimo dot com
19 years ago
Remember - GD fonts aren't antialiased. If you're planning on using a pre-existing (TrueType) font, you may want to consider using imagettftext() instead of phillip's function.
To Top