Glide框架高斯模糊图片处理

要素: Glide; TransformationRenderScriptScriptIntrinsicBlur;

对于不需要看废话的请直接Show me the code

对于模糊处理,一般的解决方案有四种:

  1. Java实现的算法处理;
  2. NDK实现的算法处理;
  3. RenderScript处理;
  4. openGL处理;

这四种方案的性能考虑的话,一般来讲应该是: 1 < 3 < 2  < 4 (2、3的性能非常接近),不过当属RenderScript方式最为简便(很显然嘛,平台无关性)。

RenderScript是Android自SDK17提供的一套平台无关计算密集脚本,它使用C99语法脚本,可以实现高性能的计算,而其包含大量内联函数,其中就包括了我们今天用到的:ScriptIntrinsicBlur,这是一个高斯模糊处理内联函数,一般系统用来进行阴影的计算处理。

上面有提到RenderScript是自SDK17引入的,但是Android 团队为我们提供了RenderScript support library,而起在Gradle-base的项目中的引入也极其简单,仅需要在module build.gradle设置以下11、12两行即可:

接下来简单说说 ScriptIntrinsicBlur,使用它虽然很方便,但是也是有弊端的,模糊radius不能超过25.0f,不过我们可以通过缩小原图抽样的方式变相的进行扩大半径。

Glide是一个优秀的图片加载缓存处理等一系列功能的框架,它优雅而且使用渐变,扩展也很容易,Glide就提供了自定义Transformation的方式进行扩展图片的处理

到了这里就是通过自定义Transformation的方式,详细的这里就不赘述了,感兴趣可以查看Glide官方文档:Transformation。需要特别提到的是,每个Transformation都有一个String getId()的回调,该ID用于在对处理后的图片进行缓存时的文件命名,这样当下次相同图片使用相同Transformation时,则无需任何实际处理,直接读取缓存文件,所以我们实现时的ID需要同时关联所有的调整参数,参数改变的ID也应该相应改变。下面就是我自定义的BlurTransformation

使用起来也是非常简单:

 

Gist: https://gist.github.com/ligboy/eee784aa57f40a615179

Android Studio Getter & Setter Template

众所周知Android Studio基于开源版的Intellij IDEA,因而具有极其便利的代码辅助功能,其中Getter & Setter生成就是其中之一,然而在Android开发时,因为Code Style for Android 规定私有的成员变量以“m”,静态私有成员变量以“s”开头的驼峰法命名:

Follow Field Naming Conventions

Non-public, non-static field names start with m.
Static field names start with s.
Other fields start with a lower case letter.
Public static final fields (constants) are ALL_CAPS_WITH_UNDERSCORES.

然而这在使用Android Studio默认的Getter & Setter 生成时会出现类似这样的情况:

插件AndroidAccessors可以处理Android代码规范生成Getter Setter这种情况,然而这个插件并不完美。而且Idea本身的getter setter生成规则是可以通过模板文件设置的,所以我们完全可以通过添加自定义规则的方式来实现Android编码规范的Getter Setter生成。

以下就是Android Studio默认的Getter及Setter模板:

Getter – Intellij Default

Setter – Intellij Default

Setter – Builder

可以看出这是某种模板引擎语言,请教了“撸大神”,被告知应该是Velocity模板引擎,原谅我的无知健忘,竟然一点印象都没有。

然后我们需要做的就很简单了,依葫芦画瓢,在原处理的基础上在进一步将$name做去除s及m前缀处理即可得到想要的结果,我定义了Getter:Android,Setter:Android、AndroidBuilder三个模板。以下附上自定义模板源码:

Getter:Android

Setter:Android

Setter:AndroidBuilder

附上Github Gist 地址: https://gist.github.com/ligboy/0eae9ecffc694595d40e

  1. 关于Velocity https://github.com/putaoshu/jdf/blob/master/doc/core_vm.md