2011-07-15 45 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