2011-06-23 62 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更快!