Flutter 便捷实现图像灰度(去色)
🌹 ⭐️ 🌹请首先看我 🌹 ⭐️ 🌹
- 下面介绍的功能都是有 iimage 库提供。
- 下面该功能需要
iimage ^ 0.0.3
以及以上可以使用。iimage
包的引入方式如下: 1. 可以手动引入idkit
包,就是将iimage ^ 0.0.3
放在项目的pubspec.yaml
文件的dependencies
模块下,然后执行flutter pub get
指令即可。 2. 可以使用后指令flutter pub add iimage
在项目根目录终端下执行即可。
[》跳过拾光记忆]
拾光记忆
简介: 针对 Flutter 项目资产管理的脚本服务。Fam 具有以下特点: 支持多种平台以及各平台无差异化、界面美观、功能齐全、快捷方便。 推荐: ⭐️⭐️⭐️⭐️⭐️
简介: 针对 Flutter 多手指检测以及手势触发其他手势也触发的问题。 推荐: ⭐️⭐️⭐️⭐️⭐️
简介: 这是让开发者更深入的了解 Dart 的枚举以及相关使用和方法。 推荐: ⭐️⭐️⭐️
简介: 这是让开发者更加便捷的实现单选、多选功能,无需你对数据处理。 推荐: ⭐️⭐️⭐️⭐️⭐️
简介: 这是让开发者更深入的了解 Flutter 的两种指针的介绍以及相关使用和方法。 推荐: ⭐️⭐️⭐️
简介: 这是让开发者更加便捷的实现多种样式的轨道滑块,比如:轨道渐变色、触控笔悬浮标等。 推荐: ⭐️⭐️⭐️⭐️⭐️
简介: 这是让开发者更加便捷的查看日志,通过日志能够分析变量当前数值以及业务逻辑走势,同时也能作为日志收集日志文本。 推荐: ⭐️⭐️⭐️⭐️⭐️
简介: 这是让开发者更加便捷的实现图像添加图片类型的水印和文字类型的水印,支持水印多种样式的设定。 推荐: ⭐️⭐️⭐️⭐️⭐️
简介: IImage 是 IDKit 的其中一个功能模块,它提供了许多方便的图像处理方法,例如:尺寸调整、相对某点的矩形位置、大小调整、图像缩放、背景去除、真实内容尺寸获取以及真实内容图像获取等等。 推荐: ⭐️⭐️⭐️⭐️⭐️
简介: 该篇主要介绍 Matrix4 的 16 个参数的含义。 推荐: ⭐️⭐️⭐️⭐️
简介: 该篇主要介绍 Flutter 中所有颜色的模式以及对应颜色的一些便捷方法有和LAB 颜色的支持以及颜色差异提供算法。 推荐: ⭐️⭐️⭐️⭐️⭐️
简介: 该篇主要介绍 Flutter 中如何实现图像的油漆桶、填充功能或者图像泛洪算法。 推荐: ⭐️⭐️⭐️⭐️⭐️
简介: 该篇主要介绍 Flutter 中如何实现图像的镜像功能以及实现原理的介绍。 推荐: ⭐️⭐️⭐️⭐️⭐️
简介: 该篇主要介绍 Flutter 中如何实现图像的旋转功能以及实现原理的介绍。图像旋转不组件旋转而是图像元数据旋转。 推荐: ⭐️⭐️⭐️⭐️⭐️
[返回拾光记忆《]
一、简述
现在许多图像编辑软件中都支持图像的灰度(去色)的功能,它是如何实现的呢?这看似简单的图像处理,其实它需要特定的算法和一些颜色计算来处理,那么在 Flutter 中是否能实现呢 ?答:能!!!。 Flutter 中 IImage 库提供了便捷的图像灰度(去色)的方法,图像灰度(去色)后也可以直接进行其他的处理。
二、灰度图像和黑白图像
- 灰度图像: 每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度;
- 黑白图像: 每个像素只有两个可能值的数字图像;
注意: 灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑白两种颜色,灰度图像在黑色与白色之间还有许多级的颜色深度。
三、IImage 图像灰度(去色)
IImage 库提供了两种方法来实现图像的灰度(去色),开发者可根据业务选择不同的方法,两种方法如下:
-
static Future<Image> desaturationFromUint32List({ required Uint32List uint32list, required int imageWidth, required int imageHeight, DesaturationAlgorithm desaturationAlgorithm = DesaturationAlgorithm.grayscale, PixelFormat pixelFormat = PixelFormat.rgba8888, })
该方法是将图像的像素集合(Uint32List) 进行灰度(去色)处理,然后返回一个 Future
类型的对象。该方法是异步的;下面是该方参数的介绍:
- uint32list : 图像的像素集合,而不是图像的二进制转化的 Uint32List 集合。
- imageWidth & imageWidth : 要灰度(去色)处理图像的宽与高。
- desaturationAlgorithm :图像像素集合灰度(去色)处理的类型。具体详情请查看 DesaturationAlgorithm。
- pixelFormat : 图像像素灰度(去色)处理后以 pixelFormat 格式的像素生成图像。
-
static Future<Image?> desaturationFromImage({ required Image image, DesaturationAlgorithm desaturationAlgorithm = DesaturationAlgorithm.grayscale, PixelFormat pixelFormat = PixelFormat.rgba8888, bool isDispose = false, })
该方法是将图像进行灰度(去色)处理,然后返回一个 Future<Image?> 类型的对象。该方法是异步的;下面是该方参数的介绍:
- image : 要灰度(去色)处理的原始图像。
- desaturationAlgorithm :图像像素集合灰度(去色)处理的类型。具体详情请查看 DesaturationAlgorithm。
- pixelFormat : 图像像素灰度(去色)处理后以 pixelFormat 格式的像素生成图像。
- isDispose :在原始图像灰度(去色)处理后生成新的图像,原图像是否销毁。
IImage 库还提供了图像像素集合进行灰度(去色)处理的方法,如下:
-
static Uint32List desaturationUint32List({ required Uint32List uint32list, required int imageWidth, required int imageHeight, DesaturationAlgorithm desaturationAlgorithm = DesaturationAlgorithm.grayscale, })
该方法是图像的像素集合进行灰度(去色)处理,然后返回一个新的像素集合,没有改变传入的图像像素集合。该方法的参数介绍如下:
-
uint32list : 图像的像素集合,而不是图像的二进制转化的 Uint32List 集合。
-
imageWidth & imageWidth : 要灰度(去色)处理图像的宽与高。
-
desaturationAlgorithm :图像像素集合灰度(去色)处理的类型。具体详情请查看 DesaturationAlgorithm。
-
四、图像灰度(去色)算法
IImage 库提供了三种进行图像灰度(去色)处理的算法;这些算法的选择是通过 DesaturationAlgorithm
参数进行控制。DesaturationAlgorithm
是一个枚举类型,它有 4 个类型,如下所示:
-
average
该类型是平均值算法;它是将 RGB 三个通道的值相加,然后求取平均值,然后再将平均值赋值到 RGB 颜色通道上完成灰度(去色)处理。
-
grayscale
该类型是通过加权值进行灰度处理;它是将 RGB 三个通道的值乘以不同的权值,然后将求的值赋值到 RGB 颜色通道上完成灰度(去色)处理。
-
mmAverage
该类型是通过 RGB 色道值中的最大和最小的值的平均值来处理图像的灰度(去色)的;它是将 RGB 三个通道的值的最大值和最小值相加,然后求取平均值,然后再将平均值赋值到 RGB 颜色通道上完成灰度(去色)处理。
-
none
该类型是对图像不进行任何处理,直接返回新的图像像素集合。
目前,图像灰度(去色)处理的算法还有很多,比如:
- 使用 RGB 颜色通道的其中一个通道的值,最为灰度图像的值;
- 保留 RGB 颜色通道的其中一个通道的值,其他通道设置为 0;
- 通过对 RGB 每个颜色通道进行加权,然后将每个色道加权后的值相加除以加权值的和,将其结果最为灰度图的颜色值。
- 通过对每个图像像素周围其他像素进行插值处理,然后将结果最为灰度图像的色值。
上面介绍每个方法都能实现图像的灰度(去色)处理,我们可以根据自己的业务需求进行合理的选择。
五、图像灰度(去色)实例
下面是图像灰度(去色)实例演示,如下所示:
上述是 IImage 库提供的图像灰度(去色)方法实验的结果以及和 PS 去色结果的对比。实例的项目代码地址,请点击 图像灰度(去色)Demo 下载。
五、支持与鼓励
上面我们介绍了图像的去色(灰度), 目前市面上有很多方法来实现这个效果,我们要根据自己的业务需求来选择不同的算法来实现图像的去色(灰度)。IImage 是 Flutter 图像处理库之一,希望大家支持与鼓励。如果你有想法,请给提出来;让我们一起来丰富 IImage 的内容。如果您对这方面感兴趣,感觉这功能还行;您的关注、评论、收藏、点赞、分享都是对我的认可和鼓励。
转载自:https://juejin.cn/post/7253350009289883685