我想在我的 Android 应用程序中使用发布照片用例。
这是我实现的场景:
1. 用户发布照片。
2. 在客户端,我缩放照片*,压缩它并发送 它到服务器。
3. 我将照片存储在服务器上。
4. 可以查看照片的用户从服务器获取照片。
这种方法的问题在于它没有考虑到 不同屏幕尺寸的问题。
假设用户 A 发布了一张照片。
用户 B 的手机屏幕更大**,他获取了照片 从服务器。照片不适合环境 因为它具有由用户 A 确定的固定宽度和高度(在第 2 步中缩放)。
我不能简单地缩放照片并将其放入用户 B 的 ImageView 中,因为 我冒着放宽照片纵横比的风险。
想到的一种方法是简单地从场景中删除步骤 2。 我将照片发送到服务器,当用户尝试获取它时 我根据用户的屏幕尺寸(我在获取请求中将其作为参数接收)缩放图像。
这种方法的问题是,对于每个请求,我都会 即时缩放照片并将其发送给客户端。 另一个问题是上传照片的效率,因为我没有缩放照片(上传之前)。 上传完整的 2MB(甚至 500KB)照片比简单上传缩放照片(~20KB)要花费更多时间。
我有哪些选择? 由于我是 Android 的新手,所以我很可能遗漏了一些重要的东西。
干杯!
*我缩放保持纵横比。
** 抱歉使用术语,我不知道如何以及何时正确使用高密度/像素。 :-)
最佳答案
我有自己的独立服务器,无限流量,4T硬盘。所以,基本上我所做的是:
- 用户通过手机拍照
- 用户上传图片到网络服务器
- 使用 ImageMagick + mozjpeg 3 我将图像调整大小 3 次并使用前缀 small_、medium_、large_ 或前缀 pre size: 1024_, 640_... 保存它
- 现在,我的应用可以通过请求指定的前缀来查找用户的屏幕尺寸和加载图像。
我在这场 war 中的主张是:
- 免费流量
- 大硬盘
- 用户网速快
- 在另一个线程中上传,并向用户展示另一个 Activity 时,他不会感受到上传大图片的“漫长等待时间”。
- 您始终可以在设备上调整照片大小,例如从 10Mb 到 2Mb,并在服务器上进行其他调整。
现在关于图像比例。在那里你不能做很多事情。您必须决定,如果拥有大屏幕和自己的宽高比的用户尝试加载由拥有小屏幕和自己的宽高比的用户上传的图像,该怎么办。
事实是屏幕尺寸并不重要。物质是一个比率。所以,你可以加载图像,把它放在 ImageView 中,如果图像“更小”,这将填充黑色背景。或者您可以加载大尺寸图像,裁剪它并将其放入 ImageView。较大的图像仅用于更好的质量。
在我的例子中,如果我将它用作预览,我总是会裁剪图像。我觉得它看起来更漂亮。当用户想要查看完整尺寸的图像时,我下载完整图像并按原样显示。
关于android - 在 Android 和服务器中发布照片用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29310339/