PHP/浏览器性能:通过浏览器生成缩略图
用户将大分辨率图像上载到服务器。需要为此图像创建缩略图。我考虑过用PHP创建缩略图,而不是使用GD密集型操作,这个过程真的可以卸载到客户端/浏览器吗?现在的现代浏览器支持快速缩小图像,但我确信做这样的工作有很多利弊,所以我的问题是PHP/浏览器性能:通过浏览器生成缩略图,php,javascript,performance,image-processing,web-worker,Php,Javascript,Performance,Image Processing,Web Worker,用户将大分辨率图像上载到服务器。需要为此图像创建缩略图。我考虑过用PHP创建缩略图,而不是使用GD密集型操作,这个过程真的可以卸载到客户端/浏览器吗?现在的现代浏览器支持快速缩小图像,但我确信做这样的工作有很多利弊,所以我的问题是 这将是一种更有效的方法,但与服务器端的GD操作相比,效率要高多少 是否有Javascript库可以以JPG格式快速保存图像,以便通过Ajax将图像发送到服务器 一般来说,转换将使用Web Workers进行,因此不会影响用户的浏览器 显然,用户可以随时利用并发送与全尺
我知道可能有更好的方法,比如完全卸载到另一台服务器,或者在凌晨3点进行批处理,但出于学术/信息目的,随着现代浏览器及其改进的Javascript引擎的出现,在客户端浏览器上可以像这样工作吗?相似性计算可能不会比简单地创建一个快速缩小规模更快,尽管我没有代码可以立即证明这一点 带宽是一个可能的问题,来回发送文件
一个可能的想法是使用Flash/Java小程序来处理上传,自动生成缩略图并将其发送出去。你是否会被每秒如此多的上传所困扰,以至于你不得不将加载分配回浏览器 可以很容易地处理,如果真的需要这么多的话,可以将其线程化或卸载到单独的机器上
在尝试优化网络传输开销中可能丢失的东西之前,您应该对此进行负载测试。我认为您弄乱了客户端/服务器端。Javascript无法生成缩略图。如果您想将浏览器委托给缩放,只需设置图像的宽度/高度我一直在做的就是在那些有EXIF缩略图的图像上抓取它,并且只为那些不包含EXIF数据的图像创建真正的缩略图 没有完全回答你的问题,但这是我的2美分:-)
编辑:我仍然通过CRON作业将所有图像排队,以便稍后进行完整处理,因为它们的大小已调整为多种大小->这只是我最初关心的即时拇指尾。感谢您的所有评论,但我找到了一个很好的解决方案:
我会做一些进一步的测试来确定它的可行性 显然,这里的主要问题是:
- a.我并不认为每个人都在使用相同的浏览器,并且具有相同的canvas/html5功能,所以应该有一个后备系统。
- b.用户有不同的执行浏览器/机器。因此,在处理大图像以缩小到缩略图大小时,必须记住这一点
- c.如果任何垃圾数据/漏洞是从浏览器/客户端发送的,那么我将在这方面解决(事实是,不管怎样,人们可以上传全尺寸图像的垃圾数据,,而且如果用户的初衷是要破坏网站,他们总会找到一种方法)
我将进行一些测试以查看性能改进,并在这里报告。虽然它处理得很好,但使用300DPI图像时速度非常慢。5个图像需要30-60秒才能生成缩略图,这在观众等待查看结果时是不好的。您使用的image magick版本是什么?他们最近做了一些性能改进。另外,GraphicsMagick比我上次检查时的ImageMagick快了很多,但没有功能丰富。6.6.3-6(从2010年开始)。没有听说过GraphicsMagick。我们做了很多PDF和EPS到位图的转换,所以如果速度更快,那就太好了,因为我们不需要处理大量的图像类型-只需要向量和高分辨率位图。GraphicsMagick非常震撼-它在不到2秒钟的时间内将166MB的tiff转换为JPG!谢谢你给我指点。这正是我想要的我想。我已经研究了一些图像比较算法,不得不说,它们看起来很重。仅仅调整大小可能比完全计算要快。所以我不得不放弃计算,希望用户不是故意发送垃圾数据。用户可以完全发送垃圾图像,而不必考虑缩略图。如果你要相信其中一个,除了信任另一个,你可能别无选择。