如何显示尚未完全加载的图像的缩略图

Posted

技术标签:

【中文标题】如何显示尚未完全加载的图像的缩略图【英文标题】:how to display a thumbnail of an image that hasn't been fully loaded 【发布时间】:2013-06-19 14:03:01 【问题描述】:

我想知道如何在客户端显示尚未从远程服务器完全下载的图像的缩略图。

例如,如果您将图像发送给whatsApp 联系人.. 该联系人将(几乎立即)看到低分辨率图像的缩略图,并且会开始下载图片,直到您看到完整的分辨率图像。

现在一种可能的情况是,此过程分为 4 个步骤:

    发件人上传图片到whats app server whatApp 在服务器上创建一个迷你版的 img whatApp 将迷你版img 发送到接收端,快速显示为低分辨率图片,同时将高分辨率版img 上传到接收端 接收者获取高分辨率图像并查看它。

我想要做的是创建发送到电子邮件客户端的所有附件的缩略图视图。我的应用程序没有服务器端方面(都是客户端)..所以我将无法复制上述过程(如果是 whatsapp 的情况)

做进一步的研究,three20 实现了图像的thumbnail view。这个库的问题是您为缩略图视图实例化的每个图像都必须指定一个缩略图 URL,这也不同于完整大小的 URL (例如,请参阅 @interface MockPhoto here).. 所以这也是一个死胡同..

这个关于渐进式图像渲染/隔行扫描的post 很有趣,但它指示图像的创建者以一种特殊的方式保存它,这对我没有帮助。

有什么想法吗?也许有一个库可以通过网络调用选择性地从图像中获取信息?

【问题讨论】:

那么你有附件,还是你生成附件? 附件都存储在 imap 服务器中.. (我们只说服务器端.. 因为我不认为 imap 改变任何东西).. 所以不,我不生成附件.. 我从服务器获取它们 【参考方案1】:

JPEG(可选)具有缩略图(在标题中)。但是,如果您无法控制图像的保存方式,那么您就无法使用它,或者如您所提到的,渐进式 JPEG 图像。此外,使用 IMAP 和 POP,您将无法访问单个附件。

如果这些图像存储在服务器端,那么您可以使用服务器端图像库生成缩略图。

但是,如果这是一个客户端电子邮件应用程序,您无法控制服务器,那么您就很不走运了。在下载邮件附件之前,您将无法执行任何操作。唯一的例外是,如果电子邮件服务器具有某种可以绑定的 API(或具有自定义 IMAP 扩展)。

POP 和 IMAP 协议没有内置任何缩略图功能。也许 Outlook 邮件服务器有什么东西?

【讨论】:

即使 Outlook 服务器的事情是真实的,不幸的是我无法实现任何供应商/服务供应商特定的库/模块.. 我希望我的电子邮件客户端与供应商无关(当然,如果gmail/google 可以提供一些东西.. 那么也许我只能在开始时部署 gmail 然后从那里开始.. 就像邮箱所做的那样)【参考方案2】:

你已经用你分解它的方式回答了你自己的问题。我的一个应用程序中有一个非常相似的结构。我写了 iMessage/WhatsApp 之类的东西(用于教育目的)。

1) 人 A 将图像发送到服务器。

2) 服务器根据图像创建缩略图。

3) 人 B 首先下载(在后台)几乎是瞬间的缩略图,因为它只有几 K 大小。

4) 下载缩略图后,将下载完整大小的图像(在后台)。

如果人 B 在完整大小的图像完成下载之前选择了缩略图,我有一个“正在加载...”文本来代替图像。

但是...除非您有充分的理由自动下载完整图像,否则我建议您仅在用户想要查看完整图像时才开始下载它。为什么要把带宽浪费在用户可能或不想看到的东西上。还记得尽可能使用压缩。

【讨论】:

JPEG 图像已经被压缩(有损)。使用无损压缩进一步压缩它们通常不会有任何改进,而且通常恰恰相反。 我不同意。我通常将图像压缩到足以节省至少 50% 的文件大小,同时将图像质量保持在可接受的范围内。但同样,这一切都取决于最终产品的用途。 我认为您可能在谈论压缩比(通常标记为“质量”)。提醒某人对自动使用压缩的文件格式 (JPEG) 使用压缩似乎很奇怪。

以上是关于如何显示尚未完全加载的图像的缩略图的主要内容,如果未能解决你的问题,请参考以下文章

单击缩略图时如何显示全尺寸图像?

下载图像缩略图并在 ListView C# 中显示它们

当英雄图像进入视口时如何突出显示缩略图

win10只加载一次缩略图

Firebase 图像存储 - 缩略图

使用 Parse 将缩略图图像加载到表格单元格中的问题