Как IMDb изменяет размер и обрезает изображение на лету? - PullRequest
1 голос
/ 23 июня 2011

Я исследовал CDN и генерацию миниатюр изображений, и я был впечатлен тем, как IMDb выполняет свои манипуляции с изображениями. Вот пример уменьшенной версии:

http://ia.media -imdb.com / изображения / M / MV5BMTc0MzU5ODQ5OF5BMl5BanBnXkFtZTYwODIwODk1._V1._SY98_CR1,0,67,98_.jpg

А вот измененная версия, которая играет с размером и кадрированием:

http://ia.media -imdb.com / изображения / M / MV5BMTc0MzU5ODQ5OF5BMl5BanBnXkFtZTYwODIwODk1._V1._SY400_CR10,40,213,314_.jpg

Кажется довольно простым, когда все, начиная с '.V1 ._...', используется для определения того, как манипулировать изображением. Все это сделано невероятно быстро, и я решил найти существующее решение, имитирующее эту функциональность.

Мне удалось найти множество решений по изменению размера изображения, и я нашел страницу Google App Engine на странице «Преобразование изображений в Java». Однако я не думаю, что Amazon IMDb использует Google для обслуживания своих изображений, и, поскольку все мои изображения находятся на Amazon S3, я не думаю, что смогу использовать это решение.

После четырех часов онлайн-поиска я решил спросить умную толпу здесь.

Дополнительный контекст: я создаю веб-приложение на Amazon Elastic Beanstalk, и я думаю о том, чтобы иметь отдельный сервер (возможно, другой Beanstalk) для обработки изображений ... аналогично тому, что делает IMDb.

Заранее благодарим вас за понимание.

1 Ответ

8 голосов
/ 23 июня 2011

Я не могу говорить о конкретной реализации IMDB, но в прошлом я реализовывал подобное решение на Amazon EC2 и S3.Вот краткий обзор моей реализации:

  1. Все основные (полноразмерные) изображения хранятся на S3, но НЕ являются общедоступными.

  2. ВсеURL-адреса src-изображений указывают на веб-сервер EC2.

  3. Меньшие (миниатюрные) версии изображений, также хранящиеся на S3, с соглашением об именах, которое определяет их размер И соотношение сторон:

    • "myimage1_s200.jpg" - это квадратная версия "myimage1.jpg", размер которой был изменен на квадрат 200x200.
    • "myimage1_h100.jpg" был изменен до максимальной высоты 100 (спеременная ширина, которая соответствует исходному соотношению сторон).
  4. Когда сервер EC2 получает запрос на определенный размер изображения: он проверяет, существует ли уже этот размер,и если это так, он возвращает существующее изображение запрашивающей стороне.

  5. Когда сервер EC2 получает запрос на размер изображения, которого НЕ существует: он получает копию следующей версии большего размератого же изображенияи изменяет его размер и возвращает новое изображение запрашивающей стороне, а также сохраняет копию на S3 для будущего использования.

Замечания по производительности:

  1. Направление Src непосредственно на ранее измененные изображения на S3 намного быстрее, если вы знаете, что они существуют!

  2. Изменение размера следующей более крупной версии по сравнению с возвращением к оригиналу - МНОГОбыстрее под нагрузкой!

...