一、前言:

我们在开发过程中,经常会遇到高斯模糊的图片,或者高斯模糊背景的情况,所以今天记录一下,下面是效果图:

普通图片.png

高斯模糊图片.png

高斯模糊背景图片.png

二、使用:

1. 依赖:

// glide的使用

implementation 'com.github.bumptech.glide:glide:4.6.1'

2. MainActivity使用

public class MainActivity extends AppCompatActivity {

private static final String TAG = "LUO";

private String url1;

private String url2;

private ImageView image1;

private ImageView image2;

private ImageView image3;

private RelativeLayout rl_background;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

image1 = findViewById(R.id.image1);

image2 = findViewById(R.id.image2);

image3 = findViewById(R.id.image3);

rl_background = findViewById(R.id.rl_background);

url1 = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1587018016842&di=a45fd7e0a73fa060c831fd6d131b1d7d&imgtype=0&src=http%3A%2F%2Fpic26.nipic.com%2F20130122%2F5056611_171645641000_2.jpg";

url2 = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1587018016841&di=b32e4e903272cbe825ae9e0104b78635&imgtype=0&src=http%3A%2F%2Fimg.taopic.com%2Fuploads%2Fallimg%2F130331%2F240460-130331064K470.jpg";

initData();

}

private void initData() {

/**

* 图片1,普通图片

*/

Glide.with(this).load(url1).into(image1);

/**

* 图片2,高斯模糊图片

*/

Glide.with(this)

.load(url2)

.apply(RequestOptions.bitmapTransform(new GlideBlurTransformation(this)))

.into(new ViewTarget(image2) {

@Override

public void onResourceReady(@NonNull Drawable resource, @Nullable Transition super Drawable> transition) {

Drawable current = resource.getCurrent();

//设置背景图

//image2.setBackground(current);

//设置图片

image2.setImageDrawable(current);

}

});

/**

* 图片3,图片+高斯模糊背景(图片)

*/

Glide.with(this).load(url2).into(image3);

//图片3,图片+高斯模糊背景(背景)

Glide.with(this)

.load(url2)

.apply(RequestOptions.bitmapTransform(new GlideBlurTransformation(this)))

// .apply(RequestOptions.bitmapTransform( new BlurTransformation(context, 20)))

.into(new ViewTarget(rl_background) {

@Override

public void onResourceReady(@NonNull Drawable resource, @Nullable Transition super Drawable> transition) {

Drawable current = resource.getCurrent();

rl_background.setBackground(current);

}

});

}

}

3. GlideBlurTransformation类

/**

* 高斯模糊

*/

public class GlideBlurTransformation extends CenterCrop {

private Context context;

public GlideBlurTransformation(Context context) {

this.context = context;

}

@Override

protected Bitmap transform(@NonNull BitmapPool pool, @NonNull Bitmap toTransform, int outWidth, int outHeight) {

// 设置渲染的模糊程度, 25f是最大模糊度

return BlurBitmapUtil.instance().blurBitmap(context, toTransform, 25, outWidth, outHeight);

}

@Override

public void updateDiskCacheKey(MessageDigest messageDigest) {

}

}

4. BlurBitmapUtil类

/**

* Function:实现高斯模糊工具类

*/

public class BlurBitmapUtil {

/**

* 图片缩放比例(即模糊度);

* 缩放比例越大,模糊度越高

*/

private static final int BITMAP_SCALE = 16;

private static BlurBitmapUtil sInstance;

private BlurBitmapUtil() {

}

public static BlurBitmapUtil instance() {

if (sInstance == null) {

synchronized (BlurBitmapUtil.class) {

if (sInstance == null) {

sInstance = new BlurBitmapUtil();

}

}

}

return sInstance;

}

/**

* @param context 上下文对象

* @param image 需要模糊的图片

* @param blurRadius 图片模糊的值

* @param outWidth 输入出的宽度

* @param outHeight 输出的高度

* @return 模糊处理后的Bitmap

*/

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)

public Bitmap blurBitmap(Context context, Bitmap image, float blurRadius, int outWidth, int outHeight) {

// 将缩小后的图片做为预渲染的图片

Bitmap inputBitmap = Bitmap.createScaledBitmap(image, outWidth/BITMAP_SCALE, outHeight/BITMAP_SCALE, false);

// 创建一张渲染后的输出图片

Bitmap outputBitmap = Bitmap.createBitmap(inputBitmap);

// 创建RenderScript内核对象

RenderScript rs = RenderScript.create(context);

// 创建一个模糊效果的RenderScript的工具对象

ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs));

// 由于RenderScript并没有使用VM来分配内存,所以需要使用Allocation类来创建和分配内存空间

// 创建Allocation对象的时候其实内存是空的,需要使用copyTo()将数据填充进去

Allocation tmpIn = Allocation.createFromBitmap(rs, inputBitmap);

Allocation tmpOut = Allocation.createFromBitmap(rs, outputBitmap);

// 设置渲染的模糊程度, 25f是最大模糊度

//其中blurRadius为模糊处理的虚化程度,不断对该数值的增大,会造成CPU的紧张,通过简单的多次使用,默认最大为25。当然越小的话对CPU负担越不重。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {

blurScript.setRadius(blurRadius);

}

// 设置blurScript对象的输入内存

blurScript.setInput(tmpIn);

// 将输出数据保存到输出内存中

blurScript.forEach(tmpOut);

// 将数据填充到Allocation中

tmpOut.copyTo(outputBitmap);

return outputBitmap;

}

}

5.总结:

设置图片的背景可以是ImageView、RelativeLayout等任何控件:

//1. ImageView

Glide.with(this)

.load(url2)

.apply(RequestOptions.bitmapTransform(new GlideBlurTransformation(this)))

.into(new ViewTarget(image2) {

@Override

public void onResourceReady(@NonNull Drawable resource, @Nullable Transition super Drawable> transition) {

Drawable current = resource.getCurrent();

//设置背景图

//image2.setBackground(current);

//设置图片

image2.setImageDrawable(current);

}

});

-----------------------------------

//2. RelativeLayout

Glide.with(this)

.load(url2)

.apply(RequestOptions.bitmapTransform(new GlideBlurTransformation(this)))

// .apply(RequestOptions.bitmapTransform( new BlurTransformation(context, 20)))

.into(new ViewTarget(rl_background) {

@Override

public void onResourceReady(@NonNull Drawable resource, @Nullable Transition super Drawable> transition) {

Drawable current = resource.getCurrent();

rl_background.setBackground(current);

}

});

可以设置图片或者是背景

//设置背景图

//image2.setBackground(current);

//设置图片

image2.setImageDrawable(current);

设置渲染的模糊程度, 25f是最大模糊度

注意: 其中blurRadius为模糊处理的虚化程度,不断对该数值的增大,会造成CPU的紧张,通过简单的多次使用,默认最大为25。当然越小的话对CPU负担越不重。

BlurBitmapUtil.instance().blurBitmap(context, toTransform, 25, outWidth, outHeight);

缩放比例越大,模糊度越高(千万不要相乘,相乘的话,模糊度太低了)

/**

* 图片缩放比例(即模糊度);

* 缩放比例越大,模糊度越高

*/

private static final int BITMAP_SCALE = 16;

// 将缩小后的图片做为预渲染的图片

Bitmap inputBitmap = Bitmap.createScaledBitmap(image, outWidth/BITMAP_SCALE, outHeight/BITMAP_SCALE, false);

android怎么处理模糊图片,Android 图片的高斯模糊处理相关推荐

  1. android动态毛玻璃,Android模糊处理实现图片毛玻璃效果

    本文实例讲解了Android 虚化图片.模糊图片.图片毛玻璃效果的实现方法,具体内容如下 效果如图: 在Android可以用RenderScript方便的实现这个方法: private void bl ...

  2. 【Android 安装包优化】Android 中使用 SVG 图片 ( SVG 矢量图简介 | Android 中生成 Vector 矢量图资源 )

    文章目录 一.SVG 矢量图简介 二.Android 中生成 Vector 矢量图资源 三.参考资料 一.SVG 矢量图简介 Android SVG 参考文档 : https://developer. ...

  3. Android开发常用开源框架:图片处理

    1. 图片加载,缓存,处理 框架名称 功能描述 Android Universal Image Loader 一个强大的加载,缓存,展示图片的库,已过时 Picasso 一个强大的图片下载与缓存的库 ...

  4. android 微信分享gif图,android后台动态创建图片并实现微信分享

    今天就记录一下. 先说明一下,之前没有做过类似的东西,百度了一两天才知道,说来很惭愧.有点笨,只能这样说. 在我的脑里只明白,如果要动态创建图片: 一.就是new 嘛 二.就是LayoutInflat ...

  5. android能用svg格式,Android加载html中svg格式图片进行显示

    最近做的一个项目是把assets目录中的html显示出来,但是因为html里面有一些工程图片,虽然我用ViewPager和PhotoView,进行显示放大了,但是因为工程图片的线条较多还是比较模糊.所 ...

  6. android bitmap 替换指定颜色,Android 实现把bitmap图片的某一部分的颜色改成其他颜色...

    把bitmap图片的某一部分的颜色改成其他颜色 private Bitmap ChangeBitmap(Bitmap bitmap){ int bitmap_h; int bitmap_w; int ...

  7. android bitmap 替换指定颜色,Android实现把bitmap图片的某一部分的颜色改成其他颜色的方法...

    Android实现把bitmap图片的某一部分的颜色改成其他颜色的方法 发布时间:2020-07-29 14:11:15 来源:亿速云 阅读:107 作者:小猪 这篇文章主要讲解了Android实现把 ...

  8. android 版本图片,Android - 图片处理之Glide4.0版本

    老婆保佑,代码无BUG 前言 一般项目我都会使用Glide作为我的图片加载框架,他和Picasso ,真的很像,郭大神早就分析过了,很详细,这里也就简单做个记录.小白白一枚,学习路上 目录 一:Git ...

  9. android图像处理系列之三--图片色调饱和度、色相、亮度处理

    原图: 处理后: 下面贴代码: 一.图片处理层: package com.jacp.tone.view; import java.util.ArrayList; import android.cont ...

  10. android 代码获取图片信息吗,Android 通过网络获取图片的代码

    Android 通过网络获取图片的代码 主activity package com.netimg; import android.app.Activity; import android.graphi ...

最新文章

  1. 使用String.format简化代码
  2. 【转载】【Python-ML】SKlearn库谱聚类SpectralClustering模型
  3. JQuery------鼠标双击时,不选中div里面的文字
  4. (王道408考研数据结构)第六章图-第三节:图的遍历(DFS和BFS)
  5. 电脑无法检查计算机更新,安装win7系统弹出错误提示无法检查更新的方法
  6. python+flask搭建CNN在线识别手写中文网站
  7. 【转】linux常用命令:find、grep
  8. UGUI的Button和Toggle
  9. PureLayout,使用纯代码写AutoLayout
  10. 中国手机市场调查报告
  11. Vivado HLS介绍及IP核的设计流程
  12. python 标签_Python DataFrame中 打标签/归类 的6种方法
  13. 设计模式——观察者(监听者,订阅)模式||线程安全||c++详解
  14. 【FPGA】Verilog实现奇偶分频
  15. 《图解HTTP》--返回结果的HTTP状态码
  16. Linux服务器集群LVS
  17. PHP编辑器哪个好用些?
  18. Ubuntu下快捷键操作
  19. java记事本UI界面类
  20. 软件架构模式-事件驱动

热门文章

  1. 金三银四裁员潮?你工作找到怎么样?
  2. 爬虫urllib库小项目---爬取豆瓣读书网的海报和书籍名称并存储
  3. python爬取网店数据_Python爬虫实现抓取京东店铺信息及下载图片功能示例
  4. 拥有对抗复杂时代的底层能力,数据达人云集的宝藏圈子,邀您加入!
  5. 设计产品主图要注意哪些细节
  6. PPP用户认证和IP地址分配
  7. 平面设计实验四 绘制工具和修饰工具
  8. c语言数组ppt,C语言中的数组PPT
  9. STM32两个APP跳转间,内存的重叠,冲突和影响
  10. qt 修改背景颜色 的几种方法