开发者社区 问答 正文

使用GD库无法将文本转换为图像

我是PHP的新手,并且关注youtube上一个过时的教程

它将文本转换为图像的地方

但是遵循代码之后。.不幸的是,我得到的只是一个灰色背景的小黑盒子

这是我的代码

header("Content-type: image/jpeg");

$email ="example@example.com";
$email_length =strlen($email);

$font_size =4;

$image_height = ImageFontHeight($font_size);
$image_width = ImageFontWidth($font_size) * $email_length;

$image = imagecreate($image_width,$image_height);

imagecolorallocate($image,255,255,255);

$font_color = imagecolorallocate($image,0,0,0);

imagestring($image,$font_size,0,0,$email,$font_color);
imagejpeg($image);

?>

请注意,我不是要在此处使用gd库为图像添加水印,而是将文本转换为图像

任何帮助将不胜感激..谢谢

展开
收起
社区秘书 2019-12-10 09:22:10 474 分享 版权
阿里云 AI 助理回答

你好!根据你提供的代码,看起来你正在尝试使用GD库将文本转换为JPEG图像。不过,你的代码中存在一些问题和遗漏,这可能是导致生成的是一个灰色背景小黑盒子的原因。以下是一些可能的修正点:

  1. 确保GD库已启用:在PHP中使用这些函数之前,请确认你的服务器上已经安装并启用了GD库。你可以通过运行 phpinfo(); 并检查输出信息中是否有GD相关部分来确认。

  2. 使用正确的函数名ImageFontHeightImageFontWidth 应该是全小写的 imagefontheight()imagefontwidth()。PHP函数名对大小写敏感。

  3. 指定字体文件:默认情况下,GD库可能没有一个明确的字体路径或默认字体可用。你需要指定一个实际存在的字体文件路径给 imagettftext 函数而不是使用 imagestring,因为后者可能受限于系统字体且功能较简单。如果你确实想用 imagestring,请确保你的环境支持它所使用的字体。

  4. 调整图像尺寸以适应文本:计算图像尺寸时,考虑到字体大小和字符间距,可能需要一些额外的缓冲区空间。

基于以上,这里是一个修改后的示例代码,使用了更灵活的 imagettftext 函数,并假设你有一个名为 arial.ttf 的字体文件位于可访问目录下:

<?php
header("Content-type: image/jpeg");

$email = "example@example.com";
$font_size = 4;
$font_file = 'arial.ttf'; // 确保这个字体文件存在于服务器上

// 获取文本尺寸
$text_box = imagettfbbox($font_size, 0, $font_file, $email);
$text_width = max(array($text_box[2], $text_box[4])) - min(array($text_box[0], $text_box[6]));
$text_height = max(array($text_box[1], $text_box[3], $text_box[5], $text_box[7])) - min(array($text_box[1], $text_box[3], $text_box[5], $text_box[7]));

$image = imagecreatetruecolor($text_width + 10, $text_height + 10); // 添加一点边距
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);

imagefill($image, 0, 0, $white); // 填充白色背景

imagettftext($image, $font_size, 0, 5, $text_height + 5, $black, $font_file, $email); // 绘制文本,注意y坐标是从底部开始计算的

imagejpeg($image);
imagedestroy($image);
?>

这段代码首先创建了一个足够大的画布来容纳文本,并使用了指定的TrueType字体文件。记得替换 'arial.ttf' 为你服务器上的实际字体路径。如果问题仍然存在,请检查错误日志以获取更多详细信息。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: