美文网首页
说一下Glide和Picasso的区别 以及Glide的使用

说一下Glide和Picasso的区别 以及Glide的使用

作者: LiChengZe_Blog | 来源:发表于2019-06-12 14:56 被阅读0次

    Glide和Picasso的区别

    首先我们了解的设置图片的方式有哪些呢?

    ImageLoader
    Glide,一个被google所推荐的图片加载库,常见的还有Picasso,Fresco等,每一个都非常稳定,功能也都十分强大。但是它们的使用场景基本都是重合的,也就是说我们基本只需要选择其中一个来进行学习和使用就足够了,每一个框架都尝试去掌握的话则有些浪费时间。最常用的是Glide和Picasso

    如果你了解不是特别多的话建议可以了解一下 :常见的图片加载框架

    Picasso的使用

    1.Picasso.with(this) .load(“http://nuuneoi.com/uploads/source/playstore/cover.jpg“) .into(ivImgPicasso);

    2.Picasso.with(this) .load(“http://nuuneoi.com/uploads/source/playstore/cover.jpg“) .resize(768, 432) .into(ivImgPicasso);

    3.Picasso.with(this) .load(“http://nuuneoi.com/uploads/source/playstore/cover.jpg“) .fit() .centerCrop() .into(ivImgPicasso);

    这三种方法都可以加载图片显示到页面上,

    第一种:加载了全尺寸的图片到内存,然后让GPU来实时重绘大小

    第二种:你需要主动计算ImageView的大小,或者说你的ImageView大小是具体的值(而不是wrap_content),

    第三种:按统一比例缩放图片(保存图片的尺寸比例)便于图片的二维(宽度和高度)等于或者大于相应的视图的维度,这种方法和Glide加载图片占用的内存几乎是相同的,虽然内存开销差距不大,但是在这个问题上Glide完胜Picasso。因为Glide可以自动计算出任意情况下的ImageView的大小。

    Glide的使用

    Glide.with(this) .load("图片的URL") .into(ivImgGlide);
    
    load方法中不仅可以传入图片地址,还可以传入图片文件File,resource,图片的byte数组等
    
    // 加载本地图片
    File file = new File(getExternalCacheDir() + "/image.jpg");
    Glide.with(this).load(file).into(imageView);
     
    // 加载应用资源
    int resource = R.drawable.image;
    Glide.with(this).load(resource).into(imageView);
     
    // 加载二进制流
    byte[] image = getImageBytes();
    Glide.with(this).load(image).into(imageView);
     
    // 加载Uri对象
    Uri imageUri = getImageUri();
    Glide.with(this).load(imageUri).into(imageView);
    
    占位图
    Glide.with(this)
         .load(url)
         .placeholder(R.drawable.loading)
         .error(R.drawable.error)
         .into(imageView);
    
    Glide 使用加载动画和禁止动画
    glide默认有淡入淡出动画.crossFade()也可以不加,
    也有重载.crossFade(int duration),主要设置动画进行快慢,默认是300毫秒
    Glide
        .with(context)
        .load(UsageExampleListViewAdapter.eatFoodyImages[0])
        .placeholder(R.mipmap.ic_launcher) 
        .error(R.mipmap.future_studio_launcher)
        .crossFade()
        .into(imageViewFade);
    
    设置图片大小
    .override(300, 200);   //设置加载图片尺寸大小
    缩略图
        缩略图不同于前面提到的占位图。占位图应当是跟app绑定在一起的资源。
        缩略图是一个动态的占位图,可以从网络加载。
        缩略图也会被先加载,直到实际图片请求加载完毕。
        如果因为某些原因,缩略图获得的时间晚于原始图片,它并不会替代原始图片,而    
        是简单地被忽略掉。
    
    .thumbnail( 0.1f )里面的参数是一个浮点乘法运算
    
    这个方法是啥意思呢?
    例如,传递一个0.1f作为参数,Glide会加载原始图片大小的10%的图片。
    
    原始图片---->1000x1000像素,
    则缩略图---->100x100像素。
    
    由于图片将会比ImageView小,你需要确保缩放类型是否正确。
    
    缓存
    我们都知道Glide是自带缓存的,所有的图片请求都会被缓存在内存和磁盘上。
    大多数情况下,缓存是一个非常有用的东西,但在一些特殊的情况下并不是很明智。
    
    禁止内存存储:
    .skipMemoryCache( true )
    
    禁止磁盘存储:
    .diskCacheStrategy( DiskCacheStrategy.NONE )
    
    .diskCacheStrategy()中枚举参数以及意义:
    
    DiskCacheStrategy.NONE 啥也不缓存
    DiskCacheStrategy.SOURCE 只缓存全尺寸图.
    DiskCacheStrategy.RESULT 只缓存最终降低分辨后用到的图片
    DiskCacheStrategy.ALL 缓存所有类型的图片 (默认)
    

    Glide与Picasso的区别:

    1、内存:

            加载同一张图片Picasso,Picasso的内存开销仍然远大于Glide。
    

    2、Image质量的细节:

            Glide默认的是Bitmap格式是RGB-565
    
            Picasso默认ARGB_8888格式
    
           Glide加载的图片没有Picasso那么平滑,但是很难察觉
    

    3、磁盘缓存:

    Picasso缓存的是全尺寸的。
    而Glide缓存的跟ImageView尺寸相同
    将ImageView调整成不同大小不管大小如何设置。Picasso只缓存一个全尺寸的。Glide则不同,它会为每种大小的ImageView缓存一次

    让Glide既缓存全尺寸又缓存其他尺寸的方法:

    Glide.with(this) .load(“http://nuuneoi.com/uploads/source/playstore/cover.jpg“) .diskCacheStrategy(DiskCacheStrategy.ALL) .into(ivImgGlide);

    Glide的这种方式优点是加载显示非常快。而Picasso的方式则因为需要在显示之前重新调整大小而导致一些延迟,Glide比Picasso快,虽然需要更大的空间来缓存。

    4、Gif动图

            Glide可以加载Gif动图,Picasso不可以加载动图
    
            Glide动画会消耗太多的内存,因此使用时谨慎使用
    

    总结一下他们之间的区别:

    (1)Glide比Picasso加载速度快,但Glide比Picasso需要更大的空间来缓存;
    (2)Glide加载图像及磁盘缓存的方式都优于Picasso,且Glide更有利于减少OutOfMemoryError的发生;
    (3)Glide可以加载Gif动图,Picasso不可以加载动图
    (4)编码格式不同
    (5)Picasso加载的图片比Glide加载的图片平滑(可忽略不计)

    相关文章

      网友评论

          本文标题:说一下Glide和Picasso的区别 以及Glide的使用

          本文链接:https://www.haomeiwen.com/subject/jbhlfctx.html