当前位置: 首页 > 知识库问答 >
问题:

处理不同尺寸照片的手机应用和服务器设计

江烨伟
2023-03-14

我不知道这个标题是否清楚地反映了问题内容。如果你认为它令人困惑,请帮助重新措辞。谢谢!

这是一个关于一些常见体系结构的通用问题。我正在开发一个可以像Instagram一样拍摄和分享照片的Android应用程序。我有一个由Django提供支持的后端Web服务。

我面临的问题是,在应用程序中,我需要显示不同分辨率的图像(例如,个人资料图像的缩略图,预览的中等分辨率以及扩展图像视图的全分辨率。我想问一个关于如何实现这一目标的常见模式。

关于完成这项任务,我有两个建议,但我不确定该走哪条路:

1.当用户从移动应用程序上传照片时,我可以在本地压缩照片并发送3种不同大小的照片(低分辨率缩略图、中分辨率和高分辨率)。所以服务器端可以存储它们,并在不同的情况下将它们返回。这种方法的缺点是,它会消耗更多用户的数据使用量,因为现在用户需要发送多个图像。这也可能导致上传花费更多时间,对用户体验的影响更大。

2.当用户从手机应用程序上传照片时,他们只上传原始图像。服务器端逻辑将对每个输入图像进行压缩,并相应地存储它们。这种方法的缺点是服务器可能需要承担更多的工作负载。在这种情况下,如果用户增加很多,可能会使服务器崩溃。

我希望在这个问题上得到一些指导,或者任何关于这个主题的参考都会有所帮助!

共有3个答案

西门嘉澍
2023-03-14

我会做的是在手机中第一次调整大小,只是一个,因为你没有一个传输13Mpx图片,而且你也不想要在你的服务器中图片2屏幕宽(这是instagram做的第一件事)。之后,上传文件,并让服务器执行其余操作。

  • 这样可以避免大量使用
  • 确保它在任何设备上都能正常工作(每个设备都有不同的功能,因此您不能相信他们的繁重工作)
  • 你可以改变一些关于设置或配置的决定,所有这些都是集中的,如果你改变了任何常见的行为,你不需要所有的设备来获得应用程序的最新版本

关于服务器崩溃,我首先会采取一个措施:

    < li >不要执行任何操作,如在上传时调整大小或复制图像,您可以选择以下方法之一: < ul > < li >当有文件请求时执行此操作。这就是,不要在用户发送的时候做,而是在有人需要的时候做。 < li >在连续的后台进程中执行,例如每分钟运行一次cronjob。 < li >或者是两者的组合,在后台有一个进程为所有待处理的图像做处理,但是如果有人进入网站,并且他们需要一个尚未生成的图像,则在该时刻生成该图像。
杜俊远
2023-03-14

艾伦——把智能手机想象成相对愚笨的终端,用于消费内容。大多数业务逻辑和繁重的处理应该在服务器端实现。

在体系结构方面,您面临着可伸缩性问题。您无法将设备的 CPU/内存或存储扩展到所需的任何级别。但是,您可以通过添加更多RAM /内核/磁盘等来水平或垂直扩展服务器。您可以将群集放在服务器上,并在数据增加到该级别时拥有一个服务器场。

因此,只上传原始图像而不进行本地处理总是明智的。除了你提到的其他缺点,本地处理也会消耗电池。

同样,业务逻辑或处理技术更改,必须重新部署所有应用。在服务器端,此类部署在您的控制之下。

葛昱
2023-03-14

将全尺寸图像上传到服务器,并让服务器完成繁重的工作。创建映像的三个版本(中小型和大型)并将其存储在服务器(或内容交付网络)上。创建一个数据库表以跟踪每个映像及其各种版本的映像 ID。

使用Android,您不会知道运行应用程序的手机有多强大,永远不要假设它可以处理您需要的任何图像处理,还要尝试将网络I / O保持在尽可能低的水平。

 类似资料:
  • 我正在为我的应用程序准备抽屉。经过一些研究,我知道需要考虑的3个参数是屏幕大小、密度和分辨率。 1.)因为对于特定的屏幕尺寸,如果密度变化,那么相应的分辨率将自动变化。此外,对于特定的密度,如果屏幕尺寸变化,那么相应的分辨率将自动变化。 按照这一逻辑,我不再考虑分辨率,计划只关注屏幕大小和密度。我的方法正确吗? 2.)现在根据文档,如果您正在为mdpi准备100x100映像,那么您应该分别为ldp

  • hello world示例的React原生APK大小约为2000万(在最新版本中),因为支持不同的硬件架构(ARMv7、ARMv8、X86等),而同一应用程序的Flatter APK大小约为700万。 尺寸差异的原因是什么?颤振支持所有硬件架构吗?

  • 我正在为我的应用程序准备图形。首先,我用photoshop准备xxhdpi分辨率普通屏幕(三星galaxy s4)的图形。现在,为了支持其他分辨率,我使用ldpi、mdpi、hdpi和xhdpi的分辨率进行了转换。 我的问题是,新的xhdpi图形在Nexus 10 xhdpi设备(也在小型2.7英寸ldpi设备上)上看起来模糊或扭曲。如何创建图形以支持这种多分辨率和各种屏幕大小的设备。

  • 我试图用swXXXdp布局文件为不同的屏幕大小创建不同的布局。不幸的是,我仍然不能分开5,0“和6,3”作为可见的附上的图像。两种大小仍然使用相同的文件:layout-sw412dp。对此有什么想法吗?

  • 简介 本文将介绍 Weex 适配不同尺寸屏幕的方法以及横竖屏动态切换时如何自适应。 Weex 如何将前端样式值转换为系统坐标值 以 iOS 为例,在应用启动时,Weex 获取当前屏幕宽度作为全局默认值。在 iOS 系统上该宽度为实际像素/屏幕比例后的 UIKit 宽度。比如 iPhone6 为 375。 @implementation WXCoreBridge + (void)install

  • 像第七章描述的,指令cache是8k或16k。 如果代码的要害部位无法完全放进指令cache,那么可以考虑减小代码尺寸。 一般32位代码比16位代码大,因为32位代码的地址和数据常量是4个字节,16位代码是2个字节。 然而,16位代码有一些其它的惩罚诸如前缀的惩罚,同时访问邻近的字带来的问题(前述10.2章)。 减小代码尺寸的其它方法在下面讨论。 如果跳转地址,数据地址和数据常量在-128到127