-1

用户将大分辨率图像上传到服务器。需要为此图像创建缩略图。我考虑过在 PHP 中创建缩略图而不是使用 GD 密集型操作,这个过程实际上可以卸载到客户端/浏览器吗?现在的现代浏览器支持快速缩小图像,但我确信做这样的任务有很多缺点和优点,所以我的问题是......

  1. 这将是一种更有效的方法,但是在服务器端比 GD 操作更有效吗?
  2. 是否有任何Javascript 库可以快速将图像保存为 JPG格式,以便可以通过 Ajax 将其发送到服务器?
  3. 作为一般说明,转换将使用 Web Workers完成,因此不会影响用户浏览器。
  4. 显然,用户可以潜在地利用并发送与全尺寸图像完全无关的缩略图。有什么好的方法可以解决这个问题,即快速计算缩略图和全尺寸图像的相似程度,如果它们相似,即 98%,那么允许图像?

我知道可能有更好的方法可以做到这一点,例如完全卸载到另一台服务器,或者例如在凌晨 3 点做批处理工作,但出于学术/信息目的,随着现代浏览器及其改进的 Javascript 引擎的出现,可以工作像这样放在客户端浏览器上?

4

5 回答 5

2

相似度计算可能不会比简单地创建一个快速缩小范围更快,尽管我没有代码来证明这一点是正确的。

带宽是一个可能的问题,来回发送文件。

一种可能的想法是使用 Flash/Java 小程序来处理上传,自动生成缩略图并将其发送。

于 2011-04-01T00:10:55.597 回答
1

我一直在做的是抓取那些拥有它的图像上的 EXIF 缩略图,并且只为那些不包含 EXIF 数据的图像创建真正的缩略图。

不能完全回答你的问题,但这是我的 2 美分 :-)

编辑:我仍然对所有图像进行排队,以便以后通过 CRON 作业进行完整处理,因为它们被调整为多种尺寸 -> 它只是得到了我最初担心的即时缩略图。

于 2011-04-01T00:26:20.157 回答
0

感谢您的所有评论,但是我找到了一个很好的解决方案:

HTML5:使用 PHP 和 Ajax 保存 Canvas 图像数据


我会做一些进一步的测试来确定它的可行性。

显然,这里的要点/关注点是:

  • 一个。我不认为每个人都在使用相同的浏览器,并且具有相同的 canvas/html5 功能,因此应该有一个后备系统。

  • 湾。用户有不同的执行浏览器/机器。因此,在处理大图像以缩小到缩略图大小时,请记住这一点。

  • C。如果从浏览器/客户端发送任何垃圾数据/漏洞利用,那么我会解决这个问题(事实是,无论如何,人们可以上传全尺寸图像的垃圾数据,如果用户的意图是一开始就把网站搞砸了,他们总会找到办法的

我将进行一些测试以查看性能改进并在此处报告。

于 2011-04-01T07:41:02.377 回答
0

您是否会因为每秒上传的次数过多而不得不将负载分配回浏览器?

ImageMagick可以轻松处理调整大小,如果真的有必要的话,可以将其线程化或卸载到单独的机器上。

在尝试优化可能在网络传输开销中丢失的东西之前,您应该对此进行负载测试。

于 2011-04-01T00:21:20.140 回答
0

我认为您弄乱了客户端/服务器端。Javascript 无法生成缩略图。如果您想委托浏览器进行缩放,只需设置图像的宽度/高度

于 2011-04-01T00:24:35.263 回答