我注意到带有重音字符(所以法语!!)
像这样
strlen("câble" * imagefontwidth(FONTSIZE));
此命令给出的字符串长度大于实际长度
所以您必须先将链传递到 utf8 解码
strlen(utf8_decode("câble") * imagefontwidth(FONTSIZE));
就是这样(抱歉我的英语!)
(PHP 4, PHP 5, PHP 7, PHP 8)
imagefontwidth — 获取字体宽度
返回字体的像素宽度。
示例 #1 在内置字体上使用 imagefontwidth()
<?php
echo '字体宽度: ' . imagefontwidth(4);
?>
以上示例将输出类似以下内容
Font width: 8
示例 #2 将 imagefontwidth() 与 imageloadfont() 结合使用
<?php
// 加载 .gdf 字体
$font = imageloadfont('anonymous.gdf');
echo '字体宽度: ' . imagefontwidth($font);
?>
以上示例将输出类似以下内容
Font width: 23
我注意到带有重音字符(所以法语!!)
像这样
strlen("câble" * imagefontwidth(FONTSIZE));
此命令给出的字符串长度大于实际长度
所以您必须先将链传递到 utf8 解码
strlen(utf8_decode("câble") * imagefontwidth(FONTSIZE));
就是这样(抱歉我的英语!)
此库函数对于仅包含文本的可变大小图像非常有用,例如我用来输出错误消息的函数,这些错误消息会累积并在我的缩略图生成器中导致致命错误
<?php
function errimg($error) {
// $error 是一个错误消息数组,每条消息占据一行
// 初始化
$font_size = 2;
$text_width = imagefontwidth($font_size);
$text_height = imagefontheight($font_size);
$width = 0;
// 图片的高度将等于 $error 中元素的数量
$height = count($error);
// 找到最长字符串的长度(以字符为单位),用于确定输出图片的宽度
for($x = 0; $x < count($error); $x++) {
if(strlen($error[$x]) > $width) {
$width = strlen($error[$x]);
}
}
// 接下来将高度和宽度转换为像素值
$width = $width * $text_width;
$height = $height * $text_height;
// 创建一个尺寸足以容纳文本的图片,并在边界外增加两行两列
$im = imagecreatetruecolor($width + ( 2 * $text_width ),
$height + ( 2 * $text_height ) );
if($im) {
// 图片创建成功
$text_color = imagecolorallocate($im, 233, 14, 91);
// 此循环将错误消息输出到图片上
for($x = 0; $x < count($error); $x++) {
// imagestring(image, font, x, y, msg, color);
imagestring($im, $font_size, $text_width,
$text_height + $x * $text_height, $error[$x],
$text_color);
}
// 现在,使用您喜欢的 image* 函数(例如 imagejpeg)呈现您的图片
out($im, array(), $error);
} else {
// 图片创建失败,因此只需转储数组并添加额外的错误信息
$error[] = "Is GD Installed?";
die(var_dump($error));
}
}
?>
该函数期望传入一个包含错误消息的数组,然后输出一个包含数组内容的图像。如果您的代码包含在一个 HTML 页面中,并且如果图像渲染不正确,该页面将显示错误,那么此功能特别有用。
此函数以图像形式显示数组,索引 0 在顶部,最高索引在底部。
不过,您必须自己编写 out() 函数,请参阅 imagejpeg、imagepng 等,了解如何编写一个不错的输出函数。
一个比 ImageFontWidth 在某些用途下更快的函数
<?
function ImageFontWidthByFilename($filename)
{
$handle = @fopen($font_locations[$i],"r");
$c_wid = @fread($handle,11);
@fclose($handle);
return(ord($c_wid{8})+ord($c_wid{9})+ord($c_wid{10})+ord($c_wid{11}));
}
echo "./font.gdf is ".ImageFontWidthByFilename("./font.gdf")." pixels wide";
?>
读取 5 种不同字体 500 次的宽度,ImageFontWidth 平均每次读取 5 个字体需要 ~0.004 秒,我的函数需要 ~0.0003 秒。
原因是 ImageFontWidth 需要调用 ImageLoadFont,但如果由于某种原因您不需要加载字体,只需要找出宽度,那么这就是适合您的函数 :-)
更多此类奇观请访问 http://puremango.co.uk