djwdj 发表于 2022-12-3 17:03

android 及html 首页变灰

android 的java 及kt 首页变灰,RenderScript 将图片处理为黑白
html的css及js首页变灰
沉痛悼念伟人逝世!

先上html 的css
```
<style type="text/css">
      html{-webkit-filter:grayscale(100%);filter:grayscale(100%);}
      body{background-blend-mode:luminosity;}
</style>
```
ie8的css(360的方案)
```
<style type="text/css">
html {
    filter: grayscale(100%);
    -webkit-filter: grayscale(100%);
    -ms-filter: grayscale(100%);
    -o-filter: grayscale(100%);
    filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1)
}

img {
    -webkit-filter: grayscale(100%);
    -moz-filter: grayscale(100%);
    -ms-filter: grayscale(100%);
    -o-filter: grayscale(100%);
    filter: grayscale(100%);
    filter: url(https://s5.ssl.qhres2.com/static/916198b3e87868a3.svg#grayscale);
    filter: gray
}
</style>
```
svg的内容
```

<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
    <filter id="grayscale">
      <feColorMatrix type="matrix" values="0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0"/>
    </filter>
</svg>
```
JS
```
<script>
document.body.style.WebkitFilter = "grayscale(100%)"; // Chrome, Safari, and Opera
document.body.style.filter = "grayscale(100%)";
</script>
```

Android
java
```
    public static void BianHui(View v){
      Paint paint = new Paint();
      ColorMatrix cm = new ColorMatrix();
      cm.setSaturation(0f);
      paint.setColorFilter(new ColorMatrixColorFilter(cm));
      v.setLayerType(View.LAYER_TYPE_HARDWARE, paint);
    }
```
例:全局调用
```
BianHui(getWindow().getDecorView());
```
kt:
```
val paint = Paint()
val cm = ColorMatrix()
cm.setSaturation(0f)
paint.colorFilter = ColorMatrixColorFilter(cm)
window.decorView.setLayerType(View.LAYER_TYPE_HARDWARE, paint)
```

RenderScript处理图片(太久没有,忘了,搬大佬
木质的旋律@简书

**一、什么是 RenderScript ?**
RenderScript 是 Android 自带一个高效的计算框架,能够自动利用 CPU、GPU、DSP 来做并行计算,能在处理图片、数学模型计算等场景提供高效的计算能力。
语法类似 C/C++, 但它是在运行时编译,是跨平台的。性能比 Java 好,比 Native 略差。

**二、如何使用 RenderScript ?**
使用时分两个步骤:
(1) 编写 .rs 脚本文件;
(2) 使用编写的文件;

(1) 编写 .rs 文件
这里我们用一个很简单的 将图片置灰 为例实现 Gray.rs 文件;

```
#pragma version(1)
#pragma rs java_package_name(me.moolv.demo.rs)

void root(const uchar4 *in, uchar4 *out, uint32_t x, uint32_t y) {
    // a 是透明度,这里不修改透明度。
    out->a = in->a;

    // 快,但并不是真正意义的去色
    out->r = out->g = out->b = (in->r + in->g + in->b) / 3;

    // 慢,但是是真正的去色
    // out->r = out->g = out->b = (in->r * 299 + in->g * 587 + in->b * 114 + 500) / 1000;
}

void init() {
}
```
第1行声明 RenderScript 的版本;
第2行 java_package_name 生命该脚本所在的Java包的包名;

root 函数:
root 函数是这个脚本的入口函数,对于图片来说,root函数负责对每一个像素做处理。
参数 in 是输入像素点的指针; out 是输出像素点的指针。

init 函数:
init 函数是可选的,用于做初始化的工作。

(2) 在 Java 代码中使用
在 Java 代码中 import:
```
import me.moolv.demo.rs.ScriptC_Gray;
```
这里的类名是 ScriptC_ 加上 .rs 的文件名。包名就是在 rs 文件生声明的包名。

下面是具体使用:
```

/**
* 将 bitmap 去色后返回一张新的 Bitmap。
*/
public static Bitmap gray(@NonNull Context context, @NonNull Bitmap bitmap) {

    // 创建输出 bitamp
    int width = bitmap.getWidth();
    int height = bitmap.getHeight();
    Bitmap outBitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);
   
    // 创建 RenderScript 对象
    RenderScript rs = RenderScript.create(context);
   
    // 创建输入、输出 Allocation
    Allocation allIn= Allocation.createFromBitmap(rs, bitmap);
    Allocation allOut = Allocation.createFromBitmap(rs, outBitmap);
   
    // 创建我们在上面定义的 script
    ScriptC_Gray script = new ScriptC_Gray(rs);
   
    // 对每一个像素执行 root 方法
    script.forEach_root(allIn, allOut);
   
    // 将执行结果复制到输出 bitmap 上
    allOut.copyTo(outBitmap);
   
    // 释放资源
    rs.destroy();
    return outBitmap;
}
```
**三、多个 kernal 函数**
除了 root 函数,我们还可以在 .rs 中定义其他的 kernal 函数,例如:

```
/**
* 黑金色转换
*/
uchar4 __attribute__((kernel)) blackGold(uchar4 in, uint32_t x, uint32_t y) {
    uchar4 out = in;

    if ((in.r < in.b) && (in.g < in.b)) {
      out.r = out.g = out.b = (in.r*299 + in.g*587 + in.b*114 + 500) / 1000;
    }

    return out;
}
```
其中函数返回值必须是 uchar4, 并且用 __attribute__((kernel)) 标记该函数是个 kernal 函数。

在 Java 代码中这样调用就可以了:
```
script.forEach_blackGold(allIn, allOut);
```

kover 发表于 2022-12-3 21:46

现在恢复彩色才是主流

lfordch 发表于 2022-12-3 21:27

感谢分享,学习了{:301_1003:}

aonima 发表于 2022-12-3 17:36

感谢分享

夏520 发表于 2022-12-3 17:48

感谢分享

wyd521 发表于 2022-12-3 18:59

感谢楼主分享

advancejar 发表于 2022-12-3 20:09

tampermonkey有个专门的 脚本,叫啥天堂的

OrientalGlass 发表于 2022-12-3 21:03

感谢分享,原理原来不是很复杂

yzjtxwd 发表于 2022-12-3 22:32

学习一下

runfog 发表于 2022-12-4 16:03

最近几天,网页首页变灰,app将图片处理为黑白
页: [1] 2
查看完整版本: android 及html 首页变灰