【问题标题】:Show blurred thumbnail before downloading the whole image (like in Whatsapp)?在下载整个图像之前显示模糊的缩略图(如在 Whatsapp 中)?
【发布时间】:2014-07-12 08:10:09
【问题描述】:

我正在尝试在 Whatsapp 上获得同样出色的 UI 效果。每次我收到一些图像,无论其大小如何,我都能在 1 秒内看到模糊的缩略图,并且在其上方显示正在下载真实图像的指示符。

他们是怎么做到的?当用户从我们的服务器下载图像时,我想达到同样的效果。我不确定他们是否在做一些服务器端图像处理,或者 Android SDK 中有一个内置功能可以做到这一点。

假设用户请求 4MB 的图像。几乎在他点击下载的瞬间,图像的模糊缩略图将出现在屏幕上,并在其上方显示下载状态指示器。我主要感兴趣的是如何如此快速地获得图像预览,实际上只需 1 秒(感觉就像是瞬间)。

附言。当您尝试上传图片时,StackOverflow 也有类似的效果。当您将它拖到上传弹出窗口时,您几乎可以立即看到它的预览。我猜 Stackoverflow 是通过使用客户端脚本来做到这一点的,我们不能在 Android 应用程序中应用它。但这是我需要的一个很好的展示(如果你不使用 Whatsapp)。

【问题讨论】:

    标签: android image


    【解决方案1】:

    我相信这个过程有两个部分

    1. 首先是从 api 服务器加载的消息部分,它将包含消息的文本内容和非常小/模糊的图像(图像的 Base64 编码字符串)以及实际视频的 url。例子

      {message:"嗨,这是我上传的视频..", thumbnail:"..base64 string of image", url:"...url to video file with key or without"}

    2. 其次是媒体部分,当用户在看到带有消息的 url 中的预览图像后单击下载按钮时开始。

    在上传消息的同时,我们也可以这样做 生成缩略图/模糊图像并分两部分提交消息

    • 首先将带有缩略图的消息上传到 api 服务器并获取媒体服务器的密钥
    • 使用 api 服务器提供的密钥向媒体服务器提交视频。

                Or
      
    • 首先将消息上传到 api 服务器并获取媒体服务器的密钥

    • 使用 api 服务器提供的密钥将视频提交到媒体服务器并让 服务器为视频生成缩略图。

    我相信我们正在运行两个单独的服务器,一个用于处理静态内容,另一个用于 api 调用。

    希望大家同意我的观点或提出任何更正建议。

    【讨论】:

      【解决方案2】:

      基本上,在这些情况下,您需要从服务器请求模糊缩略图(通常非常小,因此下载速度很快),然后开始下载完整图像。这是必须由服务器完成的事情。

      更新: 您现在可以使用渐进式 jpeg 之类的技术来实现相同的效果,而无需让您的服务器存储两个单独的图像。渐进式 jpeg 基本上在图像的第一个字节中编码质量非常低的图像,然后随着图像的继续加载,质量会提高。这可能不是您正在寻找的确切效果,但它应该能够在加载全尺寸图像时显示快速的低质量预览。目前,在 Android 上加载这些文件的唯一方法是使用 Facebook's Fresco library

      【讨论】:

      • 那么服务器必须存储两张图片供一个参考?
      • 通常你有两个不同的 url,例如 www.example.com/images/img1.png 和 www.example.com/images/img1_thumb.png。但是是的,服务器要么需要存储原始文件和缩略图,要么在需要时生成缩略图。
      【解决方案3】:

      我有另一个理论。我认为这里使用的方法是在发布消息之前,他们有一些算法来生成一个轻量级的模糊低质量图片(在发送方),然后发送该数组的内容(几个字节作为 byte[] 数组可能(来自服务器的缩略图那么为什么没有详细的缩略图呢?它也可以很小。为什么会有一个模糊的缩略图,它只是原始缩略图的浅层表示,而不像我们在网络上看到的缩略图那样完整。

      【讨论】:

      • 我不知道你的答案是正确的还是 Falkon 但喜欢你的解决方案而不是数组。我认为你的答案太好了。+1
      • 感谢您的投票。这仍然是一个理论,但可以通过嗅探从本地 LAN 发送到 whatsapp 服务器的流量来确认.. 无论如何,让我这样认为的原因是接收者获得缩略图的速度非常快,这让我认为它是原始消息本身..
      猜你喜欢
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      相关资源
      最近更新 更多