在php appengine中使用imagettftext(字体选择)

时间:2013-10-31 12:18:30

标签: php google-app-engine imagettftext

我正在尝试从谷歌的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一起使用的字体?

由于

3 个答案:

答案 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)$