【发布时间】:2018-03-31 18:28:24
【问题描述】:
我有一个要托管数千张图片的网站。不仅如此,每张图片的大小还取决于您在网页中的位置——在列表页面上,图片显示为 350x200 矩形,侧边栏图片为 100x100 等。
因此,当用户将图像上传到网站时,我会保留原始图像并为每种尺寸制作 4 个调整大小的副本。因此,如果 100 个用户上传一张图片,结果将是 500 张图片。我无法想象不同尺寸的不同移动设备会发生什么...
我开始使用 CloudFront 来优化速度。当用户上传图片时,我会将原始副本和调整大小的副本上传到 Amazon S3 存储桶。 但是如果明天我决定添加另一个尺寸,或者更改现有尺寸,我必须运行一个脚本来删除旧尺寸的图像并上传新尺寸的图像,这意味着“从 S3 获取原件,调整大小,上传新的尺寸”。这根本不实用。想象一下,当我对网站进行完全重新设计并且图像大小完全改变时,我将不得不运行一个脚本来调整每个图像的大小以适应新的要求并删除旧图像。
有没有更实用的方法来实现?
我想实现以下场景:
- 当用户上传图片时,我调整它的大小并上传到 S3
- CloudFront 将获取直接调整大小的图像
- 当我添加另一个大小时,我希望 CloudFront 看到 S3 上缺少此大小,并将其从我网站的源中提取。
我想不出一种方法来实现这一点。任何帮助或分享最佳实践将不胜感激。
【问题讨论】:
-
一种选择可能只是存储最高分辨率的图像,然后动态生成其他尺寸“on-the-fly”。我做了一个小的 PHP 脚本来显示这类事情,除了你将传递图像文件名和宽度和高度作为参数并调用 PHP 的
imagecopyresampled()方法之一 stackoverflow.com/a/25835507/2836621 。另一个例子stackoverflow.com/a/30573825/2836621 -
感谢您的建议。我忘了提到我正是这样做的(请参阅我对 John Rotenstein 回答的评论)。如果这是唯一好的解决方案,那么我将保持原样。我只是觉得有一些我想不到的东西。
标签: image image-processing amazon-s3 amazon-cloudfront