2011-06-23 63 views
1

我一直在研究CDN和圖像縮略圖生成,我對IMDb如何進行圖像處理印象深刻。下面是一個縮略版爲例:IMDb如何進行圖像大小調整和裁剪?

http://ia.media-imdb.com/images/M/MV5BMTc0MzU5ODQ5OF5BMl5BanBnXkFtZTYwODIwODk1._V1._SY98_CR1,0,67,98_.jpg

而且這裏有一個扭捏版本,大小和裁剪飾演:

http://ia.media-imdb.com/images/M/MV5BMTc0MzU5ODQ5OF5BMl5BanBnXkFtZTYwODIwODk1._V1._SY400_CR10,40,213,314_.jpg

看來相當直截了當,一切從」 .V1。 _...'用於確定如何操作圖像。這一切都以驚人的速度完成,我決定找到一個模仿此功能的現有解決方案。

我能夠在圖像大小調整中找到大量解決方案,並且我找到了Google App Engine的關於Java變換圖像的頁面。但是,我不認爲亞馬遜的IMDb使用Google來提供圖片,而且我的所有圖片都在亞馬遜的S3上,我不認爲我可以使用該解決方案。

經過四個小時的在線搜索,我決定去問這裏的智能人羣。

更多內容:我正在亞馬遜的Elastic Beanstalk上構建一個Web應用程序,我正在考慮有一個單獨的服務器(可能是另一個Beanstalk)來處理這些圖像......類似於IMDb正在做的事情。

在此先感謝您的洞察力。

回答

7

我不能說IMDB的具體實現,但過去我在Amazon EC2和S3上實現了類似的解決方案。下面是我的實現的概述:

  1. 所有在S3上存儲但不公開訪問的主(全尺寸)圖像。

  2. 所有圖像src網址指向一個EC2網絡服務器。

  3. 較小(縮略圖)的圖像也存儲在S3與識別它們的大小和縱橫比的命名約定的版本:

    • 「myimage1_s200.jpg」是正方形版「myimage1.jpg」那已被調整爲200x200平方米。
    • 「myimage1_h100.jpg」已被調整到最大高度爲100(可變寬度符合原始高寬比)。
  4. 當EC2服務器接收到對特定圖像大小的請求時:它檢查以查看該大小是否已經存在,如果是,則將現有圖像返回給請求者。

  5. 當EC2服務器收到一個不存在圖像大小的請求時:它會檢索同一圖像的下一個較大尺寸版本的副本並調整其大小並將新圖像返回給請求者,並且還會保存複製到S3以供將來使用。

性能說明:

  1. 指着圖片src的直接到S3之前調整圖像是快了很多,如果你知道它們的存在!

  2. 調整圖像的下一個較大版本vs總是回到原來的是很快LOT更快!