【问题标题】:Generating Thumbnails on Client在客户端生成缩略图
【发布时间】:2017-02-07 03:17:50
【问题描述】:

我和我的团队正在构建一个 iOS 应用程序。我们允许现场技术人员上传他们在技术设备上解决的某些问题的图像。当这些图像上传到 S3 时,放大(因此保持相对较高的质量)非常重要。

最近我们决定添加缩略图,因为当其他人浏览 iOS 应用程序时它会更快,而不是下载 1.5-2.5mb 的图像。

我的同事决定处理此问题的最佳方法是在 iOS 中生成 200-500kb 的缩略图,然后将图像和缩略图上传到 s3。

我表达了我的担忧,即我们的一些技术人员可能在世界上一些互联网速度慢且数据使用量有限的地区。所以在设备上做所有这些额外的工作并上传对我来说毫无意义。然而,团队认为这是一个很好的解决方案,并将继续前进。我已经向他们展示了如何在服务器上自动从 S3 和 Lambda 生成缩略图的简单示例......允许我们使用额外的带宽上传更高保真度的图像,或者通过上传更少的内容来提高应用程序的速度。有时,用户可能会上传多达 100 张图片...意味着额外的 20-50mb...

无论如何,我想听听一些关于你们认为处理这个问题的最佳方法的答案,主要是为了我自己的理智检查。

【问题讨论】:

  • 你的理智是完整的,除了对付尼特。对这种情况感到抱歉。
  • @JohnGriffin 谢谢你,你是我 GF(不懂技术)之后第一个告诉我这个的人。一个有常识的工程师几个月前辞职了,我想他会同意我的看法,因为他经常提到现在的团队喜欢走捷径:(
  • 你已经知道答案了,这不是一个真正的问题,因为它是基于意见的,但你也已经有了正确的答案 - 让服务器去做
  • 100 代表赏金以确保您的理智?伙计,我很同情你不得不处理那个团队决定......我认为你不会从任何值得推荐客户端缩略图创建方法的人那里得到答案......
  • 您的缩略图是什么尺寸和格式? 200-500kb 听起来很高。

标签: ios image amazon-s3 screenshot thumbnails


【解决方案1】:

我并不完全理解您项目的复杂性,但根据经验,我有一个词要给您 - Cloudinary。与通用云存储解决方案 S3 不同,cloudinary设计用于处理图像。

我们有一个每天 200,000 次点击量的在线分类应用程序,每天处理数万张照片。 cloudinary 为我们的所有需求提供了一个极其简单的解决方案。我们有用户从他们的移动和桌面设备上传的内容、这些图像的书签、基于 CDN 的服务和缩略图生成。

我有没有提到他们内置了缩略图生成?它们还有许多其他功能,包括

  • 调整大小和裁剪
  • 优化的 JPEG 自定义裁剪
  • 人脸缩略图
  • 旋转圆形缩略图
  • 缩放效果和缩放图像叠加
  • 水印图片
  • 优化的 WebP
  • 叠加、边框、阴影文字叠加、边框、阴影等

管理控制台也非常出色,您可以通过云配置上述所有功能。它几乎适用于任何应用程序(我们在内部的 Ruby、Go、NodeJS 服务、我们的 Web 应用程序以及我们的 iOS 和 Android 应用程序中使用它)。 我没有向您出售 Cloudinary 的报酬,但我可以保证,如果它是我需要的基于图像的服务,我会在任何一天通过 S3 购买 Cloudinary。像 EBay 和 TED 等主要玩家使用它来满足他们的图像要求。

【讨论】:

    【解决方案2】:

    最近我们决定添加缩略图,因为它会更快 当其他人浏览 iOS 应用程序时,而不是下载 1.5-2.5mb 图片。

    我在另一个平行宇宙中遇到了类似的问题,其中网络延迟是一个因素。我最终提交了来自设备的两张图片,一张缩略图和一张原始图片。

    1. 首先将缩略图与元数据一起发送到服务器。这使有效负载保持较小,并允许应用程序的用户继续拍照和进行注释。

    2. 原始图像也已提交到服务器,但在后台任务中。在服务器上保存原始图像是提供缩放和稍后所需的其他操作的关键。

    您可以想象,这会创建一些不那么“happy paths”的图像,因为其他用户可能无法使用原始图像。但是,在完整提交原始图像之前,他们至少可以获得预览。

    这是一个好习惯吗?

    我不能说是这样,但这肯定是一种妥协。

    这是个好主意吗?

    这取决于您的用例。在继续之前,我几乎需要立即上传元数据和一个小缩略图,但我还需要将原始数据保存在服务器上以供将来处理。

    【讨论】:

    • 不确定我是否理解,或者您是否误解了。问题是是将缩略图和全尺寸图像发送到服务器,还是在服务器端生成缩略图并仅上传大图像。如果我理解您的意思,您是说先发送缩略图,然后发送大图。所以你建议在客户端上做这个没问题?
    • @agrublev 正确,就我而言,我必须以不同的时间间隔从设备发送两者。
    • 你能解释一下你为什么这样做吗?为什么这是一个好主意,为什么没有其他选择,你认为这是一个好习惯吗?简单地说你做到了并不能回答问题:(
    • @agrublev 添加了一些额外的 cmets。归结为用例。
    猜你喜欢
    • 2010-12-12
    • 1970-01-01
    • 2018-04-12
    • 2013-08-28
    • 2021-02-20
    • 1970-01-01
    • 2010-10-15
    • 2013-11-23
    • 1970-01-01
    相关资源
    最近更新 更多