我正在尝试从谷歌的php appengine 创建一个图像,其中包含使用 imagettftext php函数呈现的一些文本。我必须指定一个字体文件名,它是该函数的路径,但我不知道如何从php脚本访问我的静态字体目录,因为当我部署应用程序时,脚本与静态文件分开存储
这是我的php脚本中的相关代码:
header("Content-type: image/png");
$image = imagecreatetruecolor($imgWidth, $imgHeight);
imagealphablending($image, false);
$transparency = imagecolorallocatealpha($image, 0, 0, 0, 127);
$black = imagecolorallocatealpha($image, 0,0,0, 0);
$font = './font/Allerta-Regular.ttf';
imagefill($image, 0, 0, $transparency);
imagesavealpha($image, true);
imagealphablending($image, true);
imagettftext($image, $fontSize, $angle, 100, 100, $black, $font, "Test text");
imagepng($image);
imagedestroy($image);
目录结构如下:
- 根
- js
- css
- 字体
- img
php脚本位于根文件夹中,字体文件位于字体文件夹中。
上面的代码在我的本地PC上运行,但在我部署到服务器时不起作用,因为imagettftext无法找到字体并引发错误消息。使用URL完整路径不起作用,因为imagettftext需要本地文件路径。
我已经尝试了$ font ='/ font / Alerta-Regular.ttf'(没有初始点)但也没有运气。
我知道我可以使用“Google云端存储”服务,但我不想雇用它并复制文件,因为我的js文件也使用了这些字体。
如何在PHP app引擎中指定与imagettftext一起使用的字体?
由于
答案 0 :(得分:1)
终于解决了。正如app.yaml configuration page所说:
为了提高效率,App Engine会分别存储和提供静态文件 从应用程序文件。静态文件在。中不可用 应用程序的文件系统。 如果您有需要阅读的数据文件 通过应用程序代码,数据文件必须是应用程序文件,和 不得与静态文件模式匹配。
所以我创建了一个新的“scriptfont”文件夹,并在app.yaml文件中定义了一个新条目,表示字体将从脚本加载,而不是提供给浏览器:
- url: /scriptfont/(.*)
script: /scriptfont/\1
现在,php脚本可以使用此文件夹中的所有文件。
答案 1 :(得分:0)
我没有在app.yaml中声明任何内容来处理字体文件请求。我的要求是使用自定义字体来生成条形码标签。字体文件不必在世界范围内提供,只能由应用程序使用。
function label()
{
....
$fbarcode = './resources/ttf/FRE3OF9X.TTF';
imagettftext($im, 75, 0, 50, 170, $black, $fbarcode, "*{$p['id']}*");
....
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
}
字体文件位于/ resources下的代码库中。这既适用于当地环境,也适用于gae。我再次不必须在app.yaml中定义任何内容。
答案 2 :(得分:0)
我已经解决了在使用php运行时在GAE中应用cool-php-captcha时处理字体文件夹的问题,请遵循Alex Alarcon的解决方案,即:
- url: /(.+\.(otf|ttf|woff))$
script: \1
对于python解决方案,其处理程序应将待处理保留为default,即
- url: /(.*\.ttf)
mime_type: font/opentype
static_files: \1
upload: (.*\.ttf)$