363

发现:

  1. Picasso 与 ImageLoader之间的区别在这里...
  2. 关于图书馆GLIDE 的信息在这里...
  3. Facebook 有自己的图书馆 Fresco
  4. 最新添加到列表线圈

问题:

  1. Picasso v/s Imageloader v/s Fresco v/s Coil 有什么区别
  2. 哪个是最好的图书馆。
  3. 如果每个图书馆都有自己的意义,它们是什么?
4

6 回答 6

195

我是 Fresco 项目的工程师之一。所以很明显我有偏见。

但你不必相信我的话。我们发布了一个示例应用程序,可让您并排比较五个库(Fresco、Picasso、UIL、Glide 和 Volley Image Loader)的性能。您可以在我们的 GitHub 存储库中获得它。

我还应该指出,Fresco 在 Maven Central 上可用,如com.facebook.fresco:fresco.

Fresco 提供了 Picasso、UIL 和 Glide 尚不具备的功能:

  1. 图像不存储在 Java 堆中,而是存储在 ashmem 堆中。中间字节缓冲区也存储在本机堆中。这为应用程序留下了更多可用的内存。它降低了 OutOfMemoryErrors 的风险。它还减少了垃圾收集应用程序必须执行的数量,从而获得更好的性能。
  2. 可以流式传输渐进式 JPEG 图像,就像在 Web 浏览器中一样。
  3. 可以在任何点周围裁剪图像,而不仅仅是中心。
  4. JPEG 图像可以原生调整大小。这避免了在尝试缩小图像大小时出现 OOMing 的问题。

还有很多其他的(请参阅我们的文档),但这些是最重要的。

于 2015-04-10T18:02:13.470 回答
140

请注意,这是一个高度基于意见的问题,所以我停止制作峡湾并制作了一张快速表

在此处输入图像描述

现在库比较很困难,因为在许多参数上,所有四个几乎都做同样的事情,除了 Fresco 可能,因为其中有一大堆新的内存级别优化。所以如果您想要某些参数,请告诉我根据我的经验查看比较。

最少使用 Fresco,答案可能会随着我继续使用和理解它来解决当前的漏洞而发展。在used personally已完成的应用程序中至少使用过一次该库。

*注意 - Fresco 现在支持 GIF 和 WebP 动画

于 2015-04-16T14:13:14.747 回答
119

壁画 来源| 场外

(-)

  • 巨大的图书馆
  • 视图、位图参数无回调
  • SimpleDraweeView 不支持 wrap_content
  • 超大缓存

(+)

  • 相当快的图像加载器(适用于中小型图像)
  • 很多功能(流媒体、绘图工具、内存管理等)
  • 可以直接在 xml 中设置(例如圆角)
  • GIF 支持
  • WebP 和动画 Webp 支持

毕加索 来源| 场外

(-)

  • 从互联网加载大图像到 ListView 缓慢

(+)

  • 图书馆的小规模
  • 小尺寸缓存
  • 使用简单
  • UI 不会冻结
  • WebP 支持

音源

(-)

  • 图书馆规模大

(+)

  • 微小的缓存大小
  • 使用简单
  • GIF 支持
  • WebP 支持
  • 从 Internet 快速将大图像加载到 ListView
  • UI 不会冻结
  • BitmapPool 重用内存,从而减少 GC 事件

通用图像加载器

(-)

  • 有限的功能(有限的图像处理)
  • 项目支持自 2015 年 11 月 27 日起停止

(+)

  • 图书馆的小规模
  • 使用简单

我在 SGS2 (Android 4.1) (WiFi 8.43 Mbps) 上测试了 Java 的官方版本,而不是 Xamarin!2015 年 10 月 19 日 我更喜欢使用 Glide。 在这里阅读更多。 如何使用 Glide将缓存写入外部存储(SD 卡) 。

于 2015-10-19T09:13:34.283 回答
112

These answers are totally my opinion

Answers

  1. Picasso is an easy to use image loader, same goes for Imageloader. Fresco uses a different approach to image loading, i haven't used it yet but it looks too me more like a solution for getting image from network and caching them then showing the images. then the other way around like Picasso/Imageloader/Glide which to me are more Showing image on screen that also does getting images from network and caching them.

  2. Glide tries to be somewhat interchangeable with Picasso.I think when they were created Picasso's mind set was follow HTTP spec's and let the server decide the caching policies and cache full sized and resize on demand. Glide is the same with following the HTTP spec but tries to have a smaller memory footprint by making some different assumptions like cache the resized images instead of the fullsized images, and show images with RGB_565 instead of RGB_8888. Both libraries offer full customization of the default settings.

  3. As to which library is the best to use is really hard to say. Picasso, Glide and Imageloader are well respected and well tested libraries which all are easy to use with the default settings. Both Picasso and Glide require only 1 line of code to load an image and have a placeholder and error image. Customizing the behaviour also doesn't require that much work. Same goes for Imageloader which is also an older library then Picasso and Glide, however I haven't used it so can't say much about performance/memory usage/customizations but looking at the readme on github gives me the impression that it is also relatively easy to use and setup. So in choosing any of these 3 libraries you can't make the wrong decision, its more a matter of personal taste. For fresco my opinion is that its another facebook library so we have to see how that is going to work out for them, so far there track record isn't that good. Like the facebook SDK is still isn't officially released on mavenCentral I have not used to facebook sdk since sept 2014 and it seems they have put the first version online on mavenCentral in oct 2014. So it will take some time before we can get any good opinion about it.

  4. between the 3 big name libraries I think there are no significant differences. The only one that stand out is fresco but that is because it has a different approach and is new and not battle tested.

于 2015-04-10T09:42:31.567 回答
64

格莱德和毕加索都不是完美的。Glide 将图像加载到内存并进行缓存的方式比 Picasso 更好,后者让图像加载速度更快。此外,它还有助于防止应用程序出现流行的 OutOfMemoryError。GIF 动画加载是 Glide 提供的杀戮功能。无论如何,毕加索解码的图像质量比 Glide 更好。

我更喜欢哪一个?虽然我用 Picasso 这么久了,但我必须承认我现在更喜欢 Glide。但我建议你将 Bitmap Format 更改为 ARGB_8888 并让 Glide 缓存全尺寸图像和调整大小的图像。其余的会很好地完成你的工作!

  • Picasso 和 Glide 的方法计数分别为 840 和 2678。
  • Picasso (v2.5.1) 的大小约为 118KB,而 Glide (v3.5.2) 的大小约为 430KB。
  • Glide 根据大小创建缓存图像,而 Picasso 保存完整图像并对其进行处理,因此在加载时使用 Glide 显示速度更快,但使用更多内存。
  • Glide 默认使用更少的内存RGB_565

+1 毕加索调色板助手

有一个帖子谈论了很多关于毕加索 vs Glide的帖子

于 2015-04-18T16:59:19.610 回答
18

我想与您分享我在Picasso、Universal Image Loader 和 Glide中所做的基准测试https ://bit.ly/1kQs3QN

Fresco 超出了基准测试,因为对于我正在运行测试的项目,我们不想重构我们的布局(因为 Drawee 视图)。

我推荐的是Universal Image Loader,因为它的自定义、内存消耗以及大小和方法之间的平衡。

如果你有一个小项目,我会选择 Glide(或者试试 Fresco)。

于 2015-11-13T00:07:07.140 回答