我正在调查有哪些产品可以让你通过 HTTP API 请求任意大小的图像。服务器将位于 CDN 后面,但仍需要能够处理相当多的流量并可能实现负载平衡。
我被委托编写这样一项服务,但我想做一些尽职调查,看看有哪些商业或开源解决方案。谷歌并没有特别有帮助。可能是因为我一直在搜索错误的术语。
由于公司政策的原因,第三方网站和服务是不可能的。
答案1
您可以将 ImageMagick 与 php/perl/python 结合使用。它将允许您调整图像大小。这里唯一的问题是,理想情况下您需要缓存图像。
为了使图像缓存友好,您必须重定向到唯一的 URL,并且必须保持每次重定向调用的状态。
例子。
http://example.com/resize/image.php?image=example.jpg&width=640&height=320 它调整了 example.jpg 的大小。为了使 image.php 能够缓存,它应该返回一个 url 重定向。 http://example.com/resize/static/example640x320.jpg
对于第二个 URL,请确保设置了正确的过期标头,以便 CDN 可以缓存它。但您还必须维护
http://example.com/resize/image.php?image=example.jpg&width=640&height=320到http://example.com/resize/static/example640x320.jpg
因为每次请求该图像时,都会调用 image.php 脚本。
对于负载平衡场景中的数据同步,您可以使用 nfs 共享,或者如果可以接受几秒钟的延迟,则使用 rsync,或者通过 API 使用文件上传(当然要确保其安全)在后端服务器之间同步数据。
答案2
您所说的尺寸是指文件大小还是图像的高度/宽度?
它们可能不一定允许“任意”大小,但减少带宽的代理(又称“加速器”)会重新压缩图像文件以缩小它们,以及其他节省带宽的技巧。维基百科有一个关于他们的页面,其中包含选项列表。
如果意味着动态重新缩放图像,那么缩略图脚本基本上就是这么做的。其中许多脚本是预先运行的,但也有一些是“动态”运行的。例如 CPAN 的成像仪模块有一个示例 CGI 脚本,可以将上传的图像缩放到 200x200。
答案3
我找到了一个开源 Apache 模块,名为mod_dims。它满足我的大部分要求,而且速度相当快。