毕加索,图像加载和调整大小

3

我在我的应用程序中有很多图片,我正在使用resize并自定义许多列表的宽度和高度,我从服务器上获取所有这些列表的大尺寸图像。使用resize是一个好主意吗?还是应该在需要时从服务器获取较小的图像,并从picasso调用中删除resize(),这样会增加应用程序性能。我的主要问题是:在应用程序中经常使用resize会降低性能,因为它需要调整应用程序中的每个图像。

4个回答

2

Picasso只会将图像resize()一次,因为它将被缓存(具体存储在LruCache中),除非缓存达到最大限制,否则缓存将删除一个图像以便存储新的图像。再次访问已删除的图像将触发另一个resize()调用,但对于那些仍然在缓存中的图像,Picasso不需要执行resize()

如果您对服务器有完全控制权,则最好创建一个可自定义图像大小参数的API。例如,您只需要缩略图像,因此只需提供图像的宽度和高度即可,而不是下载不利于缩略图的大型图像,这样您还可以节省带宽。


从服务器获取较小的图像并减少Picasso调用中的调整大小,这不是更好的方法吗?这样做会提高性能还是没有影响? - Gurvinder.Techwin
是的,它可以实现,但采用这两种方法有些过度(只选择一种即可)。如果您可以访问服务器代码,则更好的方法是采用我的第二个建议。 - Enzokie
结论:传输的数据越少,交易速度越快。 - Enzokie
很好,我想我之前错过了这个选择。谢谢 :) - Gurvinder.Techwin
你好,伙计。 - Enzokie

2
@gurvinder,关于性能优化方面有很多情况需要考虑。
场景1高分辨率图像->大图像尺寸->加载时间更长
解决方案-您可以根据应用程序支持的最大分辨率减少图像的分辨率。
场景2使用哪个图像库?Picasso,Glide,UniversalImageLoader还是Fresco?
解决方案-我建议您选择Fresco,对我来说Fresco非常出色。缓存和性能比任何其他库都要快。

到目前为止,已经尝试了Picasso、Aquery和Glide,喜欢Picasso。现在将尝试Fresco :) 谢谢。 - Gurvinder.Techwin

1

Picasso的resize()函数有助于提高渲染性能,

但如果实际文件大小很大,则与实际大小下载所需的时间相比,下载时间会更长。

因此,最好使用来自服务器的已调整大小的图像,或者如果无法为每个分辨率提供已调整大小的图像,则同时使用两种方法。

这样可以将加载时间至少减少到可接受的时间。


1

尝试使用此方法指定图像的高度和宽度

Picasso.with(mContext)
             .load(uri).resize(100, 100).centerCrop()
             .placeholder(R.drawable.type_pic)
             .error(R.drawable.type_pic)
             .into(holder.icon);

1
我正在使用这种代码,但我的问题是,频繁使用此调整大小是否会影响应用程序的性能? - Gurvinder.Techwin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接