毕加索如何下载图像

时间:2015-08-04 08:04:46

标签: android picasso

我对Picasso用于下载和缓存图片的机制有疑问。

Picasso如何下载图片?我知道它正在使用样本大小。我对吗?如果服务器上的图像是1000x1000但ImageView只有400x400,那么它将只下载500x500图像并将被缓存。或者它可能会以全分辨率下载,然后缩放到特定大小。

2 个答案:

答案 0 :(得分:2)

这是我的实际代码 - 而且我确信还有更多的人 - 使用

Picasso.with(context).load(url).fit().centerCrop().into(imageView);

Picasso无法知道它应该只下载500 * 500像素。即使图片大于需要,fit()centercrop()方法也会使其适合。

答案 1 :(得分:1)

您可以在https://github.com/square/picasso浏览毕加索的源代码。

下载图片

你可以看到Picasso下载了Downloader接口实现的图像。它使用名为OkHttpDownloader的默认下载程序,它使用OkHttp库。当无法加载时,毕加索使用UrlConnectionDownloader

识别图像尺寸

Picasso在下载之前不知道图像的大小。如果您正在开发后端服务器,您可以通过某种方式指定图像的大小,因此您的移动应用程序将通过执行具体请求来了解它,但Picasso本身无法识别它。 Picasso必须以完整大小下载图像,然后此库可以被裁剪或调整大小。

<强>缓存

我们可以在源代码中的Picasso文档中找到有关Cache的以下信息:

  

Picasso实例会自动初始化,默认值为   适合大多数实现。

     
      
  • LRU内存缓存可用应用程序RAM的15%
  •   
  • 2%存储空间的磁盘缓存高达50MB但不低于5MB。 (注意:如果您使用的话,这仅适用于API 14+   一个独立的库,在所有API级别上提供磁盘缓存   OkHttp)
  •   
  • 三个用于磁盘和网络访问的下载线程。
  •   

它非常清楚地解释了这个库中缓存的用法。 我只是不确定,如果Picasso在转换之前存储图像(调整大小,裁剪等)或在缓存中转换之后。第一个选项对我来说似乎更合理,因为我们决定稍后应用不同的转换,因此我们可能希望保留原始图像。