我需要下载非常大的 5mb+ 图像。
我知道在显示之前缩放图像以节省手机内存,但下载大图像的问题仍然存在。
例如,我如何下载图像的 50% 缩小版本,而不是下载完整图像然后对其进行缩放?
您下载的服务器必须支持它。
如果服务器不是您的,您需要查找该服务器的文档(或逆向工程)。
如果服务器是您的,则取决于使用的技术。查找您正在使用的特定服务器端技术的图像处理库。
在 imgur.com 的情况下,
Imgur 允许您每个 IP 每小时拨打 500 次电话,如果您已注册,则可以拨打 1000 次。上传次数翻了十倍。
有关图像的元数据记录在此处:http ://api.imgur.com/resources_anon#image_hash 。访问api.imgur.com/2/image/[hash].xml
或api.imgur.com/2/image/[hash].json
,然后从响应中选择image.links.small_square
(90x90) 或image.links.large_thumbnail
(?x640)。请注意,imgur 还会为其主页生成缩略图 (160x160)。这些的网址似乎是i.imgur.com/[hash]b.jpg
大图的链接是i.imgur.com/[hash].jpg
,所以如果你的链接是http://i.imgur.com/xDpEF.jpg
或http://imgur.com/xDpEF
,那么xDpEF
就是你需要的哈希值。
当 Web 服务器不提供缩小版本时,无法下载某些图像的缩小版本。
您需要在托管它们的网络/服务器上扩展它们。所以问题不是java/android,而是在网络服务器上,并且取决于它。
你不能,除非你的服务器在你下载它之前支持缩小图像。如果服务器没有该选项,则最好的选择是在从流中读取图像时使用 BitmapFactory.Options inSampleSize 将其缩小。
先生,这是不可能的,因为如果您从任何服务器下载它,那么服务器必须具有多种形式的缩放图像,例如 50% 缩放或 25% 缩放。因此,只有当您从下载图像的位置维护服务器并且在后端提供了一些缩放图像的方法时,才有可能。
如果您从任何服务器下载图像,那么如果没有任何后端程序来缩放图像,就不可能从服务器获取缩放图像。
您需要将图像下载到文件中,然后使用BitmapFactory
withBitmapFactory.Options
来确定图像的大小。根据图像大小,计算您想要缩放它的大小,然后再次使用BitmapFactory
(with Options
) 加载图像的缩放版本。
这取决于服务器,服务器应该支持缩小图像。
除了其他答案之外,还有一个解决方案可以在服务器端没有特殊软件的情况下工作;
如果图像以 JPEG 格式存储在服务器上并使用隔行/逐行模式,您将能够部分下载它们以创建缩略图。
这种特殊模式旨在在下载时查看预览图像。压缩预览图像可能会生成可用作缩略图的图像。
However I don't know a library that would support thumbnail loading this way.