Glide 图片形状裁剪 ,滤镜等

Glide 、 Picasso 、 Fresco 已逐渐成为Android主流的图片加载工具(个人见解,使用Volley、ImageLoader、xUtils的大佬们请勿喷~),在多数Android程序员的印象中,它们只是加载图片和缓存图片的工具,其实它们还有很多强大的功能没有被发掘...

今天,小编向各位介绍一下这些工具的新功能: 图像转换

下面是小编配合 Glide ,以 Glide Transformations 为例,写的一个图像转化的Demo :

Glide Transformations为Glide提供了图像剪裁、模糊、蒙版、色彩过滤等功能。

接下来,小编用另一个简单的事例说明Glide Transformations相关方法的使用~

详解开始(小司机开车了~)

1.创建一个Android工程。

2.导入 [Glide Transformations] 库。

dependencies {

    ......

    // Glide
    compile ‘com.github.bumptech.glide:glide:3.7.0‘

    // Glide图形转换工具
    compile ‘jp.wasabeef:glide-transformations:2.0.1‘

    // GPUImage
    compile ‘jp.co.cyberagent.android.gpuimage:gpuimage-library:1.3.0‘

}

3.在activity_main.xml添加两个ImageView,一个显示原图片,一个显示转换后的图片。

4.在Activity中使用Glide为两个ImageView加载同一张图片,但第2个ImageView会添加额外的位图转换方法。(举例:加载方法如下)

Glide.with(this)
            .load(url)
            .into(mImageView1);

    Glide.with(this)
            .load(url)
            .bitmapTransform(new CropTransformation(this))
            .into(mImageView2);

对于没有使用过Glide的同学,小编做下简要说明:

  • Glide.with(this) :使用Glide需要一个Context传入。
  • Glide.load(url) :加载图片的地址,可以是本地图片id、文件路径、网络图片地址(别忘记联网权限)等等。
  • Glide.into(mImageView1):加载完图片后需要在哪个ImageView中显示。
  • Glide.bitmapTransform(new CropTransformation(this)):位图转换,也是小编接下来要使用的方法。

运行下程序,界面大概是这个样子:

现在,看起来两张图片是一样的,这是因为我们的转换方法执行后和原图片的显示效果是一样的。

接下来,开始进入正题,我们开始根据类别介绍Glide Transformations提供的图片转换方法:

1.图片剪裁

CropCircleTransformation (圆形剪裁显示)

// 原图片加载省略
      ......

  // 使用构造方法 CropCircleTransformation(Context context)
     Glide.with(this)
      .load(url)
      .bitmapTransform(new CropCircleTransformation(this))
      .into(mImageView2);

  • CropSquareTransformation (正方形剪裁)
// 原图片加载省略
      ......

  // 使用构造方法 CropSquareTransformation(Context context)
  Glide.with(this)
          .load(url)
          .bitmapTransform(new CropSquareTransformation(this))
          .into(mImageView2);

  • RoundedCornersTransformation (圆角剪裁)
  • // 使用构造方法 RoundedCornersTransformation(Context context, int radius, int margin, CornerType cornerType)
      // radius :圆角半径
      // margin :填充边界
      // cornerType :边角类型(可以指定4个角中的哪几个角是圆角,哪几个不是)
      Glide.with(this)
              .load(url)
              .bitmapTransform(new RoundedCornersTransformation(this, 100, 0, RoundedCornersTransformation.CornerType.ALL))
              .into(mImageView2);

  • CropTransformation (自定义矩形剪裁)

    // 使用构造方法 CropTransformation(Context context, int width, int height, CropType cropType)
      // width : 剪裁宽度
      // height : 剪裁高度
      // cropType : 剪裁类型(指定剪裁位置,可以选择上、中、下其中一种)
      Glide.with(this)
              .load(url)
              .bitmapTransform(new CropTransformation(this, 600, 200, CropTransformation.CropType.CENTER))
              .into(mImageView2);

    PS:如果使用CropTransformation一个参数的构造方法:只填入一个Context,后续会使用图片原本的宽高进行剪裁,这实际上和没有剪裁是一样的。

2.颜色转换

ColorFilterTransformation (颜色滤镜)

// 使用构造方法 ColorFilterTransformation(Context context, int color)
  // Color :蒙层颜色值
  Glide.with(this)
          .load(url)
          .bitmapTransform(new ColorFilterTransformation(this, 0x7900CCCC))
          .into(mImageView2);

  • GrayscaleTransformation(灰度级转换)
// 使用构造方法 GrayscaleTransformation(Context context)
  Glide.with(this)
          .load(url)
          .bitmapTransform(new GrayscaleTransformation(this))
          .into(mImageView2);

3.模糊处理

BlurTransformation

// 使用构造方法 BlurTransformation(Context context, int radius, int sampling)
  // radius : 离散半径/模糊度(单参构造器 - 默认25)
  // sampling : 取样(单参构造器 - 默认1) 如果取2,横向、纵向都会每两个像素点取一个像素点(即:图片宽高变为原来一半)
  Glide.with(this)
          .load(url)
          .bitmapTransform(new BlurTransformation(this, 100, 2))
          .into(mImageView2);

PS: 模糊处理是做过兼容的,当API>=18时使用RenderScript,API<18时使用FastBlur。

4.遮罩掩饰(视图叠加处理)

  • MaskTransformation

    // 使用构造方法 MaskTransformation(Context context, int maskId)
      // maskId :遮罩物文件ID
      Glide.with(this)
              .load(url)
              .bitmapTransform(new MaskTransformation(this, R.mipmap.ic_launcher))
              .into(mImageView2);
![MaskTransformation.png](http://upload-images.jianshu.io/upload_images/2693519-b517fb2e490cd9ec.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

5.GPU过滤(需要依赖GPUImage库)

  • ToonFilterTransformation (卡通滤波器)

    // 使用构造方法 ToonFilterTransformation(Context context, float threshold, float quantizationLevels)
      // threshold :阀值(单参构造器 - 默认0.2F)影响色块边界的描边效果
      // quantizationLevels :量化等级(单参构造器 - 默认10.0F)影响色块色彩
      Glide.with(this)
              .load(url)
              .bitmapTransform(new ToonFilterTransformation(this, 0.2F, 10F))
              .into(mImageView2);
![ToonFilterTransformation.png](http://upload-images.jianshu.io/upload_images/2693519-f3e2319129c4906c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

SepiaFilterTransformation (乌墨色滤波器)

// 使用构造方法 SepiaFilterTransformation(Context context, float intensity)
  // intensity 渲染强度(单参构造器 - 默认1.0F)
  Glide.with(this)
          .load(url)
          .bitmapTransform(new SepiaFilterTransformation(this, 1.0F))
          .into(mImageView2);

  • ContrastFilterTransformation (对比度滤波器)
// 使用构造方法 ContrastFilterTransformation(Context context, float contrast)
  // contrast 对比度 (单参构造器 - 默认1.0F)
  Glide.with(this)
          .load(url)
          .bitmapTransform(new ContrastFilterTransformation(this, 3F))
          .into(mImageView2);

  • InvertFilterTransformation (反转滤波器)
// 使用构造方法 InvertFilterTransformation(Context context)
  Glide.with(this)
          .load(url)
          .bitmapTransform(new InvertFilterTransformation(this))
          .into(mImageView2);

  • PixelationFilterTransformation (像素化滤波器)
// 使用构造方法 PixelationFilterTransformation(Context context, float pixel)
  // pixel 像素值(单参构造器 - 默认10F)数值越大,绘制出的像素点越大,图像越失真
  Glide.with(this)
          .load(url)
          .bitmapTransform(new PixelationFilterTransformation(this, 20F))
          .into(mImageView2);

  • SketchFilterTransformation (素描滤波器)
// 使用构造方法 SketchFilterTransformation(Context context)
  Glide.with(this)
          .load(url)
          .bitmapTransform(new SketchFilterTransformation(this))
          .into(mImageView2);

  • SwirlFilterTransformation (旋转滤波器)
// 使用构造方法 SwirlFilterTransformation(Context context, float radius, float angle, PointF center)
  // radius 旋转半径[0.0F,1.0F] (单参构造器 - 默认0.5F)
  // angle 角度[0.0F,无穷大)(单参构造器 - 默认1.0F)视图表现为旋转圈数
  // center 旋转中心点 (单参构造器 - 默认new PointF(0.5F,0.5F))
  Glide.with(this)
          .load(url)
          .bitmapTransform(new SwirlFilterTransformation(this, 1.0F, 0.4F, new PointF(0.5F, 0.5F)))
          .into(mImageView2);

  • BrightnessFilterTransformation (亮度滤波器)
// 使用构造方法 BrightnessFilterTransformation(Context context, float brightness)
  // brightness 光亮强度[-1F,1F](单参构造器 - 默认0.0F)小于-1F纯黑色,大于1F纯白色
  Glide.with(this)
          .load(url)
          .bitmapTransform(new BrightnessFilterTransformation(this, 0.5F))
          .into(mImageView2);

  • KuwaharaFilterTransformation (Kuwahara滤波器)
// 使用构造方法 KuwaharaFilterTransformation(Context context, int radius)
  // radius 半径 (单参构造器 - 默认25)
  Glide.with(this)
          .load(url)
          .bitmapTransform(new KuwaharaFilterTransformation(this, 10))
          .into(mImageView2);

  • VignetteFilterTransformation (装饰图滤波器)
// 使用构造方法 VignetteFilterTransformation(Context context, PointF center, float[] color, float start, float end)
  // center 装饰中心 (单参构造器 - 默认new PointF(0.5F, 0.5F))
  // color 颜色组合 (单参构造器 - 默认new float[0.0F,0.0F,0.0F]) 3个颜色值分别对应RGB3种颜色,取值范围都为[0.0F,1.0F]
  // start 起始点 (单参构造器 - 默认0.0F)
  // end 终止点 (单参构造器 - 默认0.75F)
  Glide.with(this)
          .load(url)
          .bitmapTransform(new VignetteFilterTransformation(this, new PointF(0.5F, 0.5F), new float[]{0.0F, 0.0F, 0.0F}, 0.0F, 0.5F))
          .into(mImageView2);

时间: 2024-10-13 17:21:36

Glide 图片形状裁剪 ,滤镜等的相关文章

Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide图片缓存库的联系与区别

Universal-Image-Loader,android-Volley,Picasso.Fresco和Glide五大Android开源组件加载网络图片比较 在Android中的加载网络图片是一件十分令人头疼的事情,在网上有着许多关于加载网络图片的开源库,可以让我们十分方便的加载网络图片.在这里介绍一下Universal-Image-Loader,android-Volley,Picasso.Fresco和Glide的一些使用以及最基本的用法介绍. 1. // imageView是一个Imag

Glide图片加载库的使用

Glide是 Google推荐的图片加载库,它可以支持来自url,Android资源,文件,Uri中的图片加载,同时还支持gif图片的加载,以及各种图片显示前的bitmap处理(例如:圆角图片,圆形图片,高斯模糊,旋转,灰度等等),缓存处理,请求优先级处理,动画处理,缩略图处理,图片大小自定义等等.可谓是非常的强大. 1.添加Glide库 需要在build.gradle中加入依赖,目前最新的版本是3.7.0,Glide库地址 compile 'com.github.bumptech.glide:

Qt 制作透明背景图片与裁剪图片(很实用)

这两天想做一个五子棋游戏,想从零开始自己绘制各种图片素材,将经验心得整理如下. 制作透明背景图片: void MyPainter::DrawKit() { QImage image(30, 30, QImage::Format_ARGB32); memset(image.bits(), 0x00, image.byteCount()); // 绘制图片 QPainter painter(&image); painter.setPen(QPen(Qt::red, 2, Qt::SolidLine)

android选择本地图片并裁剪

本文使用Android原生的选择和裁剪功能.下面是代码: public class PickAndCropActivity extends AppCompatActivity implements View.OnClickListener { public static final int REQUEST_CODE_PICK_IMG = 1; public static final int REQUEST_CODE_CROP_IMG = 2; /** * ImageView展示选择的图片和裁剪得

android开发——从相冊中选择图片不裁剪

转载请注明出处:http://blog.csdn.net/zhoubin1992/article/details/46864777 问题: 在郭神的第一行代码中,第8章的从相冊中选择图片这块,从相冊选一张裁剪后显示到屏幕.可是执行后会发现从相冊选了图片后.没有弹出裁剪的界面,直接返回. 方案: 查找原因时,发现SD卡路径下的output_image.jpg是一个0字节文件.所以 这张图片没有生成.然后我认为是向系统发送选择照片的意图出了问题.我好奇的查看了下系统的图库应用(gallery)源代码

通过Nginx访问FastDFS文件系统并进行图片文件裁剪的性能测试和分析

前段时间公司的分布式图片文件系统(FastDFS)做了图片裁剪和缩放功能,并把缩放计算和FastDFS做了解耦分离,前端用虚拟机作为图片文件缩放的访问代理层(Nginx Proxy),后端使用nginx直接访问FastDFS的文件系统.以下是测试和分析过程. 1测试场景 为了测试解耦后的图片读取并发和分析系统瓶颈,我们在内网中搭建了一个测试环境.以下是测试环境的网络的物理架构图: 上图中: NginxProxy:CPU解耦后的图片裁剪代理服务器 Storage:图片的存储服务器 ab:图片访问的

Android笔记之 图片自由裁剪

前言--项目中需要用到对用户头像的裁剪和上传功能.关于裁剪,一开始是想自己来做,但是觉得这个东西应该谷歌有开发吧,于是一搜索官方文档,果然有.于是,就果断无耻地用了Android自带有关于照片的自由裁剪.因为时间太紧,虽然不太华丽,但是胜在能用,节省时间嘛. 具体是通过 Intent的action来实现的. 关键代码如下: public void imageCut(Uri uri) { Intent intent = new Intent("com.android.camera.action.C

android Glide图片加载框架的初探

一.Glide图片加载框架的简介 谷歌2014年开发者论坛会上介绍的图片加载框架,它让我们在处理不管是网路下载的图片还是本地的图片,减轻了很多工作量, 二.开发步骤: 1.添加链接库 compile 'com.github.bumptech.glide:glide:3.7.0' 2.代码编写,主要特性 Glide.with(context) .load(imgUrl) .dontAnimate() .skipMemoryCache(true) .diskCacheStrategy(DiskCac

本地图片形状做成圆形

把本地图片形状做成圆形方法: //id(drawable类型) public static void setcircle(Context context,int id,ImageView img) { Bitmap bitmap=BitmapFactory.decodeResource(context.getResources(), id); RoundedBitmapDrawable mRound =RoundedBitmapDrawableFactory.create(context.get