2011-03-31 187 views
-1

用戶將大分辨率圖像上傳到服務器。需要爲此圖像創建縮略圖。我想過,而不是在GD中使用密集操作來創建PHP中的縮略圖,這個過程是否可以實際上卸載到客戶端/瀏覽器?現代瀏覽器這些天有支持迅速縮小圖像,但我敢肯定有很多缺點和優點做這樣的任務,所以我的問題是...PHP /瀏覽器性能:通過瀏覽器生成縮略圖

  1. 這將是一個更有效的方式這樣做,但效率更高而不是在服務器端的GD操作?
  2. 是否有任何Javascript庫那裏可以保存JPG格式的圖像格式快,所以它可以通過Ajax發送到服務器?
  3. 作爲一般說明,轉換將使用Web Workers完成,因此不會影響用戶的瀏覽器。
  4. 顯然,用戶可以利用和發送與全尺寸圖像完全無關的縮略圖。有沒有什麼好辦法,即快速計算縮略圖和全尺寸圖像的相似程度,如果它們是98%相似,則允許圖像?

我知道有這樣做的可能是更好的方法,如卸載到另一臺服務器完全,或在凌晨3點例如做一個批處理作業,但對於學術/信息學的目的,用現代的瀏覽器,並且出現了改進的Javascript引擎,可以像這樣工作放在客戶端瀏覽器上?

回答

2

相似性計算可能不會更快,然後簡單地創建一個快速縮減比例,儘管我沒有代碼來正確地證明這一點。

帶寬想起來是一個可能的問題,來回發送文件。

一個可能的想法是使用Flash/Java小程序來處理上傳,自動生成縮略圖併發送它。

+0

這正是我的想法。我研究過一些圖像比較算法,不得不說,它們看起來很沉重。這可能會使probabyl更快地調整大小,而不是完全計算。所以我不得不放棄這個計算,並希望用戶不是故意發送垃圾數​​據。 – 2011-04-01 07:11:08

+2

用戶可以完全發送垃圾圖像,從不知道縮略圖。如果你要信任一個,你可能沒有多少選擇,只能相信另一個。 – Unsigned 2011-04-01 16:21:09

0

你打算每秒鐘上傳這麼多的上傳文件,你必須將負載分發給瀏覽器嗎?

ImageMagick可以很容易地處理resizing,並且如果真的有必要,那麼可以將它們線程化或卸載到單獨的機器上。

在嘗試優化可能在網絡傳輸開銷中丟失的某些內容之前,您應該加載測試。

+0

雖然它處理得很好,但在300DPI圖像下速度很慢。 5張圖片大約需要30-60秒才能顯示縮略圖,這在觀看者等待查看結果時不合適。 – niggles 2011-04-01 00:31:01

+0

您使用的是什麼版本的圖像magick?他們最近做了一些性能改進。此外,GraphicsMagick比上次檢查時ImageMagick快很多,但不像功能豐富。 – fresskoma 2011-04-01 00:34:08

+0

6.6.3-6(自2010年起)。還沒有聽說過GraphicsMagick。我們爲位圖轉換做了大量的PDF和EPS,所以如果速度更快,這將非常棒,因爲我們不需要使用gazillion圖像類型 - 只需使用矢量和高分辨率位圖。 – niggles 2011-04-01 03:33:46

0

我認爲你搞砸了客戶端/服務器端。 Javascript無法生成縮略圖。如果你想委託瀏覽器縮放只是設置圖像的寬度/高度

1

我一直在做的是抓住那些有它的圖像的EXIF縮略圖,只爲那些沒有創建真正的縮略圖包含EXIF數據。

並不完全回答你的問題,但它是我的2美分:-)

編輯:我仍然可以通過一個cron作業隊列中用於以後完全處理所有圖像,因爲它們調整到多種尺寸 - >這只是得到我最初關心的那個直接的縮略圖。

0

感謝您的意見,但是我已經找到了一個很好的解決這個:

HTML5: Saving Canvas Image Data Using PHP And Ajax


我會做一些進一步的測試製定出它的feasability。

顯然要點/這裏是擔憂:

  • 一個。我毫不妄想每個人都使用相同的瀏覽器,並且具有相同的canvas/html5功能,因此應該有一個備用系統。

  • b。用戶使用不同的瀏覽器/機器。因此,在處理大圖像時縮小爲縮略圖大小時應記住這一點。

  • c。如果任何垃圾數據/利用從瀏覽器/客戶端發送的話,我會解決,當涉及到它(事實是,人們可以上傳垃圾數據的全尺寸圖像,反正,和如果用戶的意圖是搞砸了擺在首位的網站,他們一定會找到一個辦法

我會做一些測試,看看性能方面的改進,在這裏報到。