2011-07-15 47 views
2

php gd imagettftext函数只能从文件加载真正的字体类型。有没有一种方法可以从内存中加载它?例如,我从数据库中拉出文件,并以某种方式将字节串传递给它?php imagettftext从内存中加载

我唯一能想到的其他选择是从db中加载文件,将其写入磁盘(如果它尚不存在),然后加载它/ w imagettftext。有没有更好的办法?

+0

为什么你不能将字体保存到磁盘? – Mike

回答

1

临时文件听起来像一个非常好的想法,但我质疑你为什么要将它存储在数据库中。将所有这些TTF存储在某个目录中会更有效率。然后我只是存储路径/文件名。将临时文件写入磁盘的许多临时操作在高负载环境中可能会产生相当大的负面影响。

+0

为了方便起见,我将其存储在数据库中。做备份更容易,而且当这些文件附加到其他数据时,更容易保持一致。我决定我会设置一个缓存。它将检查磁盘上的文件,如果没有,它会将其加载到数据库中并将其永久存储在文件系统中。未来的通话只会从FS上下载。如果我需要迁移到另一台服务器,我只需要备份一个地方(其他所有地方都在配置管理系统下)。 – rizen

+0

听起来像一个坚实的方法。 –

2

我建议将所有二进制文件存储在文件系统中,并将路径存储到数据库上的这些文件。数据库不是二进制文件的地方。

+1

我不喜欢这样,因为它有可能丢失磁盘上的文件,然后你拥有的只是数据库中一个不存在的文件的路径。这也使安装镜像变得更加困难。一般来说,将二进制文件存储在数据库中可能不是一个好主意,但考虑到我的环境和要求,我相信这是最好的途径。 – rizen

+0

@rizen:的确,我自己也经历过同样的经历,并得出了相同的结论。 – Rolf

1

我相信你被迫从GD文件系统读取。即使实现自定义流包装也没有帮助; GD显然不使用PHP的流系统,只是加载文件本身。

你可能想要做的是使用另一种语言与图像处理库,可以完成你所需要的。您将能够使用PHP提供您的网页,并使用其他方式提供您的图像。

+0

这似乎是这种情况 - 我同意。 – Rolf