2011-03-31 125 views
-1

用户将大分辨率图像上传到服务器。需要为此图像创建缩略图。我想过,而不是在GD中使用密集操作来创建PHP中的缩略图,这个过程是否可以实际上卸载到客户端/浏览器?现代浏览器这些天有支持迅速缩小图像,但我敢肯定有很多缺点和优点做这样的任务,所以我的问题是...PHP /浏览器性能:通过浏览器生成缩略图

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

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

回答

2

相似性计算可能不会更快,然后简单地创建一个快速缩减比例,尽管我没有代码来正确地证明这一点。

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

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

+0

这正是我的想法。我研究过一些图像比较算法,不得不说,它们看起来很沉重。这可能会使probabyl更快地调整大小,而不是完全计算。所以我不得不放弃这个计算,并希望用户不是故意发送垃圾数​​据。 – 2011-04-01 07:11:08

+2

用户可以完全发送垃圾图像,从不知道缩略图。如果你要信任一个,你可能没有多少选择,只能相信另一个。 – Unsigned 2011-04-01 16:21:09

0

你打算每秒钟上传这么多的上传文件,你必须将负载分发给浏览器吗?

ImageMagick可以很容易地处理resizing,并且如果真的有必要,那么可以将它们线程化或卸载到单独的机器上。

在尝试优化可能在网络传输开销中丢失的某些内容之前,您应该加载测试。

+0

虽然它处理得很好,但在300DPI图像下速度很慢。 5张图片大约需要30-60秒才能显示缩略图,这在观看者等待查看结果时不合适。 – niggles 2011-04-01 00:31:01

+0

您使用的是什么版本的图像magick?他们最近做了一些性能改进。此外,GraphicsMagick比上次检查时ImageMagick快很多,但不像功能丰富。 – fresskoma 2011-04-01 00:34:08

+0

6.6.3-6(自2010年起)。还没有听说过GraphicsMagick。我们为位图转换做了大量的PDF和EPS,所以如果速度更快,这将非常棒,因为我们不需要使用gazillion图像类型 - 只需使用矢量和高分辨率位图。 – niggles 2011-04-01 03:33:46

0

我认为你搞砸了客户端/服务器端。 Javascript无法生成缩略图。如果你想委托浏览器缩放只是设置图像的宽度/高度

1

我一直在做的是抓住那些有它的图像的EXIF缩略图,只为那些没有创建真正的缩略图包含EXIF数据。

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

编辑:我仍然可以通过一个cron作业队列中用于以后完全处理所有图像,因为它们调整到多种尺寸 - >这只是得到我最初关心的那个直接的缩略图。

0

感谢您的意见,但是我已经找到了一个很好的解决这个:

HTML5: Saving Canvas Image Data Using PHP And Ajax


我会做一些进一步的测试制定出它的feasability。

显然要点/这里是担忧:

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

  • b。用户使用不同的浏览器/机器。因此,在处理大图像时缩小为缩略图大小时应记住这一点。

  • c。如果任何垃圾数据/利用从浏览器/客户端发送的话,我会解决,当涉及到它(事实是,人们可以上传垃圾数据的全尺寸图像,反正,和如果用户的意图是搞砸了摆在首位的网站,他们一定会找到一个办法

我会做一些测试,看看性能方面的改进,在这里报到。