我们正在维护大规模Web应用程序中的图像媒体数据库。高分辨率jpgs很大(> 15MB),不得以任何方式下载。现在我们需要向客户端提供对图像细节(作物)的访问(如放大功能)。客户应该看到图像的缩小版本,并能够选择要在全比例模式下查看的区域(100%)。
如何以最高性能(流量和CPU方式)实现?只要高分辨率图像文件保持受保护,我们就可以使用任何解决方案。该应用程序是在c#和.net framework 3.5中开发的。
有什么想法吗?提前谢谢!
答案 0 :(得分:1)
首先,您需要做的是在将图像上传到服务器之前对其进行压缩和水印。然后将这些呈现给用户。这将占用最少的CPU资源,因为它们的图像将是静态的。
然后我个人会裁剪完整尺寸版本的图像,然后将它们放在压缩版本旁边。通过这种方式,客户端可以在整个高分辨率版本的小样本旁边查看完整图像(尽管是压缩和水印)。
您可能希望避免使用动态图像操作,除非您的客户端数量较少且服务器非常强大。
答案 1 :(得分:0)
我会向浏览器提供图像的低分辨率版本,并提供一个客户端裁剪ui,然后将请求发送回服务器,该服务器将裁剪选择并以高分辨率发回。
答案 2 :(得分:0)
正如我对父亲说的那样(不了解互联网是如何运作的),如果你能在网页上看到它,你可以保存它,这只是一个如何做的问题。
答案 3 :(得分:0)
您可能会喜欢深色缩放的ajax版本 - 请参阅Dragon:
http://livelabs.com/seadragon-ajax/gallery/
向用户呈现图像的低分辨率版本;然后他们可以放大他们喜欢的任何部分。
答案 4 :(得分:0)
首先,我会预先渲染所有全尺寸图像的水印版本,以压缩文件格式保存它们,以及预渲染的低分辨率版本。
我会提供低分辨率图像进行浏览。然后用水印高分辨率图像供用户设置他们的裁剪。
在确认时,我会有第二个专用图像处理服务器裁剪非水印图像,将裁剪后的图像传递给发送给客户端的网络服务器。
话虽这么说,仍然可以创建一个客户端脚本来养殖裁剪部分并将它们拼接在一起以创建非水印图像的完整大小副本。
答案 5 :(得分:-1)
不得提供 以任何方式下载。
与以下内容不一致:
客户应该看到缩小版 版本的图像,并能够 选择要查看的区域 满量程模式(100%)。
...在您允许以完全分辨率查看图像的所有区域的点处,可以将整个图像拼接在一起。因此,您可以有效地(如果非常不方便)制作全尺寸图像。
这些都无法帮助您实现目标。
我这样做的方法是提供一个72dpi水印副本,用于选择要下载的图像区域。如果屏幕不动产是一个问题,你可以将其缩放到原始的%。让用户选择左上角和右下角坐标。然后使用像imagemagick这样的东西将原始区域中的这个区域复制到用户身上。
如果您需要节省资源,您可以让用户从预定义的网格下载,因此第一次选择网格坐标14:11时,image_1411_crop.jpg会被写入文件系统,下一次该坐标是选中后,该文件已存在。
编辑:阅读您对其他答案的一些评论...
无论您采用何种方式进行生成和服务器端缓存,您都将使用相同数量的带宽和流量。一个300dpi的jpeg是一个300dpi的jpeg,无论它是刚刚生成还是位于文件系统上。
您必须了解是否需要节省CPU或磁盘空间。如果你有一百万的图像和只有四十个用户,你可以负担得起CPU。如果您有四十个图像和一百万用户,请选择硬盘。
答案 6 :(得分:-2)