Java 下载缩略图而不是整个图像

Java 下载缩略图而不是整个图像,java,android,image,url,download,Java,Android,Image,Url,Download,我有一个显示一些杂志头版的应用程序。这些图像分辨率很高。如果我只想显示低分辨率的图片,那么下载整个图片是无用的,而且会消耗电池/时间/数据。因此,问题是:如何从图像URL中获取缩略图URL,这样我就不需要下载图像了?使用服务器端进程(PHP、ASP…等)创建缩略图,然后从新URL下载。如果图像被隔行扫描/用于渐进下载,可以想象,您可以下载一些文件数据并使用这些数据创建缩略图,但这是一个非常专门的用例,不太可能得到广泛支持 否则,鉴于对图像格式和支持检索特定字节范围的服务器的深入了解,您可以有选择

我有一个显示一些杂志头版的应用程序。这些图像分辨率很高。如果我只想显示低分辨率的图片,那么下载整个图片是无用的,而且会消耗电池/时间/数据。因此,问题是:如何从图像URL中获取缩略图URL,这样我就不需要下载图像了?

使用服务器端进程(PHP、ASP…等)创建缩略图,然后从新URL下载。

如果图像被隔行扫描/用于渐进下载,可以想象,您可以下载一些文件数据并使用这些数据创建缩略图,但这是一个非常专门的用例,不太可能得到广泛支持

否则,鉴于对图像格式和支持检索特定字节范围的服务器的深入了解,您可以有选择地仅下载必要的图像数据来创建缩略图,但这将是极其困难的

很有可能,虽然你的想法很有趣并且可能有用,但根本没有办法做到这一点


根据杂志的数量,你可以考虑有一个单独的服务器下载封面图片并准备缩略图。然后,您的移动应用程序可以首先查询该服务器,如果有缩略图,请使用它,而不是下载全尺寸图像。

我认为Dave是对的,最佳解决方案是修改图像服务器端。然而,听起来你可能无法百分之百地控制降临到你身上的图像。这并不会让你有很多选择来减少数据量

要最大限度地减少设备上的内存使用量,您可以将图像采样到适当的大小,以便保存在内存中并显示的图像与需要的图像一样大

您可以使用如下代码(请记住清理流):

您可以在这里阅读:了解如何获得适当的样本大小,并使用inJustDecodeBounds


耐心点。。。算术很难。

有点离题,但你可能想看看。你可以将你的图片发送给他们存储,然后通过请求特殊的URL轻松获得动态生成的缩略图。这似乎正是我所需要的。如果我对这个问题没有那么准确,我很抱歉。如果我可以直接引用一个URL而不必上传它,那就太好了。不幸的是,你仍然需要将你的图像上传到他们的服务中,但一旦你上传了,它确实为你节省了很多工作。我在发布之前对此做了一些研究,似乎每个在线缩略图提供商都像这样[link]www.makeathumbnail.com[/link link]. 他们可以让你上传一张图片,并得到你的缩略图,但不可能编码。另一方面,有数百个Web快照站点提供网页快照的缩略图。我要的是更简单的东西,必须在外面。谢谢现在我知道它可能已经存在了。你可以找到一些非常简单的PHP图像大小调整/缓存脚本(例如phpThumb)并实现它,而不需要第三方站点/软件。感谢你的快速回答,但我正在考虑一个在线服务。我给了他们图片的URL,他们给了我缩略图的URL。得到图片后,我把它作为一个可绘制的图形输入到ImageView。我以为ImageView会帮我解决这个问题。拿着一个分辨率比你能展示的更高的绘图板有什么意义?如果缩略图失败,我将实现这一点。塔恩克斯!因此,默认情况下,ImageView会将图像缩小到其边界,但它会将整个图像保留在内存中,因此如果ImageView的边界变大,图像将拉伸/收缩。开发人员有责任对图像进行采样以满足我们的需要。叹气,工作。再次感谢。看起来这个功能就是pinch zoom使用的。执行。现在,低RAM设备将爱上我:)
        FileInputStream fis = new FileInputStream(new File(path));
        final BufferedInputStream is = new BufferedInputStream(fis);
        final Options opt = new BitmapFactory.Options();

        // THIS IS THE IMPORTANT LINE:
        opt.inSampleSize = sampleSize;

        Bitmap img = BitmapFactory.decodeStream(is, null, opt);