IMDb如何实现其动态图像调整大小和裁剪?

时间:2011-06-23 17:10:49

标签: amazon-web-services image-manipulation cdn

我一直在研究CDN和图像缩略图生成,我对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正在使用谷歌来提供其图像,因为我的所有图像都在亚马逊S3上,我认为我不能使用该解决方案。

经过四个小时的在线搜索,我决定在这里向聪明的人群询问。

进一步背景:我正在亚马逊的Elastic Beanstalk上构建一个Web应用程序,我正在考虑使用一个单独的服务器(可能是另一个Beanstalk)来处理图像......类似于IMDb正在做的事情。

提前感谢您的见解。

1 个答案:

答案 0 :(得分:8)

我无法谈及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以备将来使用。

  6. 表现说明:

    1. 如果您知道它们存在,将图像src直接指向S3上先前调整过的图像要快得多!

    2. 调整下一个较大版本的图片,并且总是回到原版,在加载时会更快!