2011-05-16 56 views
4

我正在創建一個社交網絡,用戶可以上傳他們的個人資料圖片。生成縮略圖的最佳做法?

此圖片將被用於150/150 px維度的檔案頁面中。

在主頁,即用戶活動飼料我需要相同的圖像在75/75像素。

什麼是做飛(timthumb)這個

  1. 調整圖像的最佳實踐。
  2. 在服務器中調整大小並保存圖像。
+1

在服務器中調整大小和保存圖像,減少開銷 – Ibu 2011-05-16 04:47:50

+0

,所以我需要投入更多的服務器空間。 – user737767 2011-05-16 04:49:56

+0

服務器空間將是重要的,快速響應考慮使用cdn – Ibu 2011-05-16 05:00:02

回答

3

雖然上傳照片創建所需的縮略圖組,並保存爲[IMAGE_NAME] 拇指 [size_name] .jpg或這樣:

uploaded: file.jpg 
medium: file_thumb_150x150.jpg 
small: file_thumb_75x75.jpg 

命名約定是你的,但在快速方式您可以輕鬆訪問您需要的數據。無需使用服務器即時生成或在瀏覽器中進行縮放。

+0

你也可以只有一個拇指 - 例如只有150像素,並通過簡單的CSS減少到75像素。瀏覽器可以輕鬆做到這一點。 – gaRex 2011-05-16 08:45:05

+0

是的,但它會帶寬開銷。 150x150是比75x75大4倍的圖像。如果你的陳述是真實的,我們可以利用原始圖像並且不生成縮略圖[假設寬度/高度比是可接受的] – 2011-05-16 19:07:59

+0

@Tomasz,我們也不知道這是一種壞的還是好的方式,就像我們在不同的情況下無限的帶寬。另一個選擇,你提供的,只是活的原始是太極端了。例如,我把你的頭像,並調整到150,然後到75像素。它不是4倍大,但只有2倍:)因爲150/75將是2.也通過文件大小(我用簡單的ms office resizer): 8,40 KB(8 603字節)與3,67 KB (3 765字節)只有2.28的比例。 – gaRex 2011-05-17 03:17:34

0

我告訴你我在做什麼。我總是存儲全尺寸的圖像,但將它重命名爲帶有前導零的數據庫ID。在第一次使用時,我創建縮略圖並將其存儲在其他文件夾中,並在接下來的調用中使用它。

0

如果服務器空間和帶寬是一個問題,您應該考慮使用cdn。

亞馬遜有一個good service,

2

我一直在這個問題上一小會兒,並已遇到這樣的3個主要方面:

  1. 在上傳點作爲生成縮略圖後臺進程。
  2. 通過主應用需求生成圖像
  3. 使用URL作爲API

每種方法都有其優點和缺點按需生成圖像。

  1. 這種方法是最具限制性的,您必須先了解縮略圖的所有用途和尺寸,以便在上傳後立即生成縮略圖。主要優點是可以使用像nginx這樣的服務器有效地提供圖像,並且就像任何其他靜態資源一樣。
  2. Django有一個名爲sorl-thumbnail的庫,它提供了一個模板標籤,用於在需要時生成各種縮略圖。它使用快速鍵/值存儲來跟蹤生成的縮略圖,並且如果檢測到源圖像已更改,則會自動使陳舊生成的圖像失效。模板標籤然後返回生成的圖像的URL,它可以直接從nginx提供,而不需要通過腳本層。比1更靈活,但不能(例如)使用JavaScript生成圖像URL並期望它存在,它必須由網站的後端代碼或模板完成。
  3. 完全動態和靈活的,你可以通過調整URL來獲得你想要的任何版本的圖像,亞馬遜使用這種方法,就像所有那些佔位符圖像生成網站一樣。可以在JavaScript中生成URL並做任何你想要的事情。網站本身並不需要任何縮略圖層的知識,因爲可能有一些幫助程序方法可以爲您生成網址。但是,這顯然是最耗費資源的做事方式,您需要確保您的架構能夠處理負載。你需要使用渾身解數書及時無效緩存,避免不必要的點擊率調整的大小腳本等

我的處事方式3的忠實粉絲,我喜歡的圖像生成與我的主要網站功能完全隔離,我喜歡相當大的靈活性,但在配置服務器來處理它時,您需要知道自己在做什麼。

+0

我正在完成我的申請。我無法改變我的框架。 – user737767 2011-05-23 04:36:53