0

我正在尝试从 google 的 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);

目录结构是这样的:
- root
    - js
    - css
    - font
    - img
其中 php 脚本在根文件夹中,字体文件在 font 文件夹中。

上面的代码在我的本地 PC 上工作,但当我部署到服务器时不起作用,因为 imagettftext 找不到字体并引发错误消息。使用 URL 完整路径也不起作用,因为 imagettftext 需要本地文件路径。

我也试过 $font = '/font/Allerta-Regular.ttf' (没有初始点)但没有运气。

我知道我可以使用“谷歌云存储”服务,但我不想租用它并复制文件,因为我的 js 文件也使用了这种字体。

如何在 PHP 应用程序引擎中指定字体以与 imagettftext 一起使用?

谢谢

4

3 回答 3

1

终于解决了。正如app.yaml 配置页面所说:

为提高效率,App Engine 将静态文件与应用程序文件分开存储和提供。静态文件在应用程序的文件系统中不可用。如果您有数据文件需要应用程序代码读取,则数据文件必须是应用程序文件,并且不能通过静态文件模式匹配。

所以我创建了一个新的“scriptfont”文件夹并在 app.yaml 文件中定义了一个新条目,表示字体将从脚本中加载,而不是提供给浏览器:

- url: /scriptfont/(.*)
  script: /scriptfont/\1

现在,该文件夹中的所有文件都可以被 php 脚本使用。

于 2013-11-11T12:24:42.953 回答
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 中定义任何内容。

于 2014-06-07T18:42:44.270 回答
0

在使用 php runtime 在 GAE 中应用cool-php-captcha时,我已经解决了处理字体文件夹的问题,请遵循 Alex Alarcon 的解决方案,即:

- url: /(.+\.(otf|ttf|woff))$
  script: \1

对于 python 解决方案,它的处理程序应该将保留作为默认值,即

- url: /(.*\.ttf)
  mime_type: font/opentype
  static_files: \1
  upload: (.*\.ttf)$
于 2014-11-02T09:22:35.463 回答