PHP Conference Japan 2024

imageloadfont

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

imageloadfont加载新字体

描述

imageloadfont(字符串 $filename): GdFont|false

imageloadfont() 加载用户定义的位图并返回其标识符。

参数

文件名

当前字体文件格式为二进制格式,并且依赖于架构。这意味着您应该在与运行 PHP 的机器相同类型的 CPU 上生成字体文件。

字体文件格式
字节位置 C 数据类型 描述
字节 0-3 int 字体中字符的数量
字节 4-7 int 字体中第一个字符的值(通常是空格的 32)
字节 8-11 int 每个字符的像素宽度
字节 12-15 int 每个字符的像素高度
字节 16- char 包含字符数据的数组,每个字符中每个像素一个字节,总共 (nchars*width*height) 字节。

返回值

返回一个 GdFont 实例,或者在失败时返回 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 字体并写入 'Hello'
$font = imageloadfont('./04b.gdf');
imagestring($im, $font, 0, 0, 'Hello', $black);

// 输出到浏览器
header('Content-type: image/png');

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

参见

添加注释

用户贡献的注释 3 条注释

siker at norwinter dot com
19 年前
假设字体文件的唯一“架构相关”部分是字节序,我编写了一个快速简便的 Python 脚本来在两者之间进行转换。它只在一个机器上的单个字体上进行了测试,所以不要指望它一定能工作。它所做的只是交换前四个整数的字节序。

#!/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());

我成功地使用此脚本将下面的字体链接之一中的 anonymous.gdf 转换为可在 Mac OS X 上使用的格式。
alex at bestgames dot ro
19 年前
用于防止网站上自动注册的验证码生成。

函数参数为
$code - 你将随机生成的代码
$location - 将生成的图像的相对位置
$fonts_dir - GDF 字体的相对目录位置

此函数将创建包含你提供的代码的图像,并将其保存到指定目录中,文件名由代码的 MD5 哈希值构成。

你可以在 fonts 目录中插入任意数量的字体类型,并使用随机名称。

<?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;

}

?>
[email protected]
19 年前
请记住 - GD 字体没有抗锯齿效果。如果您计划使用预先存在的(TrueType)字体,您可能需要考虑使用 imagettftext() 代替 Phillip 的函数。
To Top