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

Joe*_*bey 1 image-manipulation cdn amazon-web-services

我一直在研究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 ._...'开始的所有内容都用于确定如何操作图像,这似乎非常简单.这一切都快速完成,我决定找到一个模仿这个功能的现有解决方案.

我在图像重新调整大小时找到了很多解决方案,我找到了关于用Java转换图像的Google App Engine页面.但是,我不认为亚马逊的IMDb正在使用谷歌来提供其图像,因为我的所有图像都在亚马逊的S3上,我认为我不能使用该解决方案.

经过四个小时的在线搜索,我决定向这里的智能人群询问.

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

提前感谢您的见解.

Scr*_*dog 8

我不能谈论IMDB的具体实现,但我过去在Amazon EC2和S3上实现了类似的解决方案.以下是我的实施概述:

  1. 所有主(全尺寸)图像存储在S3上,但不可公开访问.

  2. 所有图像src网址都指向EC2 Web服务器.

  3. 较小(缩略图)版本的图像也存储在S3上,其命名约定标识了它们的大小和宽高比:

    • "myimage1_s200.jpg"是"myimage1.jpg"的方形版本,已经调整为200x200平方.
    • "myimage1_h100.jpg"已调整为最大高度100(可变宽度符合原始宽高比).
  4. 当EC2服务器收到特定图像大小的请求时:它检查该大小是否已存在,如果是,则将现有图像返回给请求者.

  5. 当EC2服务器收到对不存在的图像大小的请求时:它检索同一图像的下一个较大尺寸版本的副本并调整其大小并将新图像返回给请求者,并且还将副本保存到S3以获取未来的使用.

绩效说明:

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

  2. 调整图像的下一个较大版本与始终返回原始图像的大小在加载时速度更快!