2011-07-08 103 views
4

我們正在構建一個網絡應用程序,它將會有很多圖片被上傳。哪種解決方案最適合優化這些圖像並將其存儲在網站上?PHP圖像優化器

還有一種方法,我也可以自動增強正在上傳的圖像?

回答

11
  1. 不要將圖像存儲在數據庫中,將它們存儲在文件系統中(作爲實際文件)。儘管可能需要在數據庫中存儲關於它們的信息,例如文件名,上傳時間,大小,所有者等。
  2. 文件名必須是唯一的。您可以使用yyyymmddhhiissnnnn,其中yyyymmdd是年,月和日,hhiiss - 小時,分和秒,nnnn - 第二張圖像的編號,即0001,第二張圖像的0002等。這將爲您提供獨一無二的文件名與罰款順序。
  3. 考慮製作一些邏輯目錄結構。將數百萬張圖片存儲在單個文件夾中不是一個好主意,因此您需要使用類似images/<x>/<y>/<z>/<filename>的內容。這也可以跨越多個服務器。
  4. 保留原始圖像。你永遠不知道你會在一兩年後想要做什麼。您可以將它們轉換爲一些通用的格式,例如,如果您允許上傳JPG,PNG和其他格式,則可以將它們全部存儲爲JPG格式。
  5. 創建和存儲您的網站所需的各種調整大小的圖像。例如,社交網絡通常具有3種調整大小的圖像 - 一種用於在各個地方(非常小)顯示用戶評論,一種用於在簡檔頁面中顯示(很小,但不像圖標;可能是一些240x320像素)和一種爲「全尺寸」查看(通常比原來小)。這些相關圖像的文件名應該類似於原始圖像的文件名,例如後綴_icon,_profile_full可能被添加到原始圖像的文件名。根據您的資源和同時上傳的圖像數量,您可以實時(在相同的HTTP請求中)或使用一些後臺處理(cron作業,持續檢查是否存在新圖像轉換)。

至於自動增強圖像 - 這是可能的,但只有當你確切地知道圖像必須做什麼。我認爲分析每個圖像並決定應該如何處理它可能太複雜並且花費太多資源。

2

上面的binaryLV的所有好建議。除了他的建議#5之外,你也可能想要優化你創建的縮略圖。當圖片上傳時,他們可能會有縮略圖不需要的元數據。您可以無損刪除元數據以縮小縮略圖大小,如下所示:http://code.google.com/speed/page-speed/docs/payload.html#CompressImages。我個人對我的網站使用jpegtran圖像,以便在創建時自動優化縮略圖。如果您需要元數據,您可以從原始圖像中獲取。

如果您計劃爲用戶顯示這些圖像,還需要考慮的其他事項是將您的圖像託管在無cookie的域或子域中,如此處所述:http://developer.yahoo.com/performance/rules.html#cookie_free。如果圖像託管在具有Cookie的域或子域上,則每個圖像都會發送一個不必要的cookie。它可以爲每張圖片節省幾KB,這可以爲您帶來不俗的收入,特別是在移動設備上的受限帶寬連接上。