11

我试图了解网络是否允许查看渐进式JPEG。

假设我们有一个服务器(参见渐进式 jpegs):

$ identify /var/www/test.jpg
/var/www/test.jpg JPEG 2048x1080 2048x1080+0+0 8-bit DirectClass 129KB 0.020u 0:00.019
$ identify -verbose /var/www/test.jpg | grep Inter
  Interlace: JPEG

现在,如果我们放置以下 HTML 文档:

$ cat /var/www/test.html
<!DOCTYPE html>
<html>
<head><title>jpg test</title></head>
<body>
<p><img src="test.jpg" width="256" height="128"></p>
</body>
</html>

我试图了解(根据img 元素)是否需要用户代理来下载整个 2048x1080图像,而渲染区域仅为256x128.

或者相反,允许一个User Agent考虑渲染区域:256x128,因此推断它只能处理渐进式JPEG 的一部分。知道拥有全分辨率没有意义,因为它不会向图像添加任何细节(从技术上讲,即使在低分辨率下,质量层也会产生影响,这只是为了简化)。

通常,我想知道在谷歌地图等应用程序中,用户代理是否可以中止(暂停?)当前显示的图像的检索,因为用户决定仅根据解压缩渐进式JPEG的部分结果来放大一些(整个 JPEG 还没有在用户端)。


更新:事实证明,web 在这里使用loadingHTML 中的属性尝试了一种不同的方法:

<img src="example.jpg" loading="lazy" alt="example" />
4

4 回答 4

7

在网站中使用渐进式 JPEG 的想法与节省带宽的关系不大,而与更早向最终用户展示某些内容有关。无论如何,浏览器仍然会下载完整的图像,但渐进式 JPEG 允许用户看到更早发生的事情。

JPEG 上的W3 页面是这样说的:

渐进式 JPEG 是一种对信息进行重新排序的方法,以便在仅下载一小部分后,呈现整个图像的模糊视图,而不是仅一小部分的清晰视图。

因为包含 IMG 标记通常意味着您希望浏览器下载该资产,所以它不会仅仅因为确定它已下载“足够”而中途中止它。浏览器也不知道您稍后打算如何处理图像 - 也许您稍后会放大它,或者它可能需要稍后以不同的尺寸显示它。部分下载一次意味着浏览器可能需要稍后再次下载。

维基百科关于 JPEG的文章指出:

然而,渐进式 JPEG 并没有得到广泛支持,[需要引用],甚至某些支持它们的软件(例如 Windows 7 之前的 Internet Explorer 版本)[12] 仅在图像完全下载后才显示图像。

因此,即使某些浏览器在下载“足够”之后确实中止了这些连接,也没有足够的浏览器为我提供支持,甚至一开始就考虑使用它们。

于 2013-04-03T15:41:04.383 回答
0

简短的回答是没有标准的方法来中止img(渐进式或其他方式)而不离开或中止页面或更改标签的 src(这将删除部分图像)。我也不知道有什么黑客可以做到这一点。

虽然这听起来像是一个不错的功能,但在以下常见情况下,现有网站会出现问题:

  • 使用大型渐进式图像作为缩略图 + 预加载的图像库(即Galleria这样做)
  • 任何依赖onload图像事件的网站(如果可以中止/暂停,您的半渲染图像在什么时候被视为“加载”)?

仅出于这些原因,除非将其作为属性添加到规范中(例如已弃用的属性或您明确要求此行为的lowsrc某种属性),否则这将是一个坏主意。allowpartial作为关注 WHATWG 讨论的人,我可以告诉你它几乎肯定会被彻底拒绝,原因很简单,它增加了解决边缘问题的复杂性。如果确实需要此功能,那么几年前宽带几乎普及之前就会有需求。在游戏的这一点上,巧妙地使用 Javascript 和/或缩略图基本上是多余的。

于 2013-04-08T00:54:54.370 回答
-1

据我了解您的问题,答案在很大程度上取决于您要支持的浏览器。

可以使用“Firebug”等 3rd 方插件轻松检查浏览器行为。这些插件可以显示页面创建的进度、请求的内容以及发送到服务器和从服务器发送的字节数。在 Firebug 中,它可以在“Net”选项卡中看到。

于 2013-04-02T09:38:22.243 回答