Metal每日分享,调整透明度滤镜效果

news2024/11/29 7:44:08

本案例的目的是理解如何用Metal实现调整透明度效果滤镜,核心就是改变图像像素的透明度值;


Demo

  • HarbethDemo地址

实操代码

// 透明度滤镜
let filter = C7Opacity.init(opacity: 0.75)

// 方案1:
ImageView.image = try? BoxxIO(element: originImage, filters: [filter, filter2, filter3]).output()

// 方案2:
ImageView.image = originImage.filtering(filter, filter2, filter3)

// 方案3:
ImageView.image = originImage ->> filter ->> filter2 ->> filter3

效果对比图

  • 不同参数下效果
opacity: 0.25opacity: 0.5opacity: 0.75
WX20221213-111831.pngWX20221213-111841.pngWX20221213-111850.png

实现原理

  • 过滤器

这款滤镜采用并行计算编码器设计.compute(kernel: "C7Opacity"),参数因子[opacity]

对外开放参数

  • opacity: 将图像的不透明度从0.0更改为1.0,默认值为1.0;
/// 透明度调整,核心就是改变`alpha`
public struct C7Opacity: C7FilterProtocol {
    
    public static let range: ParameterRange<Float, Self> = .init(min: 0.0, max: 1.0, value: 1.0)
    
    /// Change the opacity of an image, from 0.0 to 1.0, with a default of 1.0
    @ZeroOneRange public var opacity: Float = range.value
    
    public var modifier: Modifier {
        return .compute(kernel: "C7Opacity")
    }
    
    public var factors: [Float] {
        return [opacity]
    }
    
    public init(opacity: Float = range.value) {
        self.opacity = opacity
    }
}
  • 着色器

核心就是改变inColor.a

kernel void C7Opacity(texture2d<half, access::write> outputTexture [[texture(0)]],
                      texture2d<half, access::read> inputTexture [[texture(1)]],
                      device float *opacity [[buffer(0)]],
                      uint2 grid [[thread_position_in_grid]]) {
    const half4 inColor = inputTexture.read(grid);
    
    const half4 outColor = half4(inColor.rgb, half(*opacity) * inColor.a);
    
    outputTexture.write(outColor, grid);
}

Harbeth功能清单

  • 支持ios系统和macOS系统
  • 支持运算符函数式操作
  • 支持多种模式数据源 UIImage, CIImage, CGImage, CMSampleBuffer, CVPixelBuffer.
  • 支持快速设计滤镜
  • 支持合并多种滤镜效果
  • 支持输出源的快速扩展
  • 支持相机采集特效
  • 支持视频添加滤镜特效
  • 支持矩阵卷积
  • 支持使用系统 MetalPerformanceShaders.
  • 支持兼容 CoreImage.
  • 滤镜部分大致分为以下几个模块:
    • Blend:图像融合技术
    • Blur:模糊效果
    • Pixel:图像的基本像素颜色处理
    • Effect:效果处理
    • Lookup:查找表过滤器
    • Matrix: 矩阵卷积滤波器
    • Shape:图像形状大小相关
    • Visual: 视觉动态特效
    • MPS: 系统 MetalPerformanceShaders.

最后

  • 慢慢再补充其他相关滤镜,喜欢就给我点个星🌟吧。
  • 滤镜Demo地址,目前包含100+种滤镜,同时也支持CoreImage混合使用。
  • 再附上一个开发加速库KJCategoriesDemo地址
  • 再附上一个网络基础库RxNetworksDemo地址
  • 喜欢的老板们可以点个星🌟,谢谢各位老板!!!

✌️.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/87937.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java MybatisPlus入门 字段映射 分页查询 逻辑删除 乐观锁

MyBatisPlus&#xff08;简称MP&#xff09;是基于MyBatis框架基础上开发的增强型工具&#xff0c;旨在简化开发、提高效率 入门案例 继承BaseMapper<自己的domain类> 就可以了&#xff0c;自动装配后直接会有各种方法 标准数据层开发 MP分页查询功能 条件查询 NULL值控制…

玩以太坊链上项目的必备技能(单位以及全局变量-Solidity之旅七)

以太币单位&#xff08;Ether&#xff09; 甭管是虚拟货币还是现实中的“稳定币”&#xff0c;他们都有各自的货币单位。当然咯&#xff0c;作为以太坊区块链上交易的虚拟货币以太坊也是有属于自己的那一套货币单位的。 而目前以太币&#xff08;Ether&#xff09;主要分为这…

python批量下载apache文件服务器文件

此脚本用于下载apache文件服务器中制定某个文件夹下所有文件与文件夹。 包含下载单个文件的方法、拼接url递归下载的方法、参数解析。 1 下载文件 功能点&#xff1a; 文件下载 以追加写的方式打开一个新文件&#xff0c;按照块大小写入文件 with open(filepath, wb) as fi…

Kafka实战 - 03 Kafka生产者:将X平台的告警和事件数据接入到S平台

文章目录1. 项目背景2. 依赖和配置3. 生产者配置 KafkaConfiguration4. 同步数据Topic枚举 SyncDataTopicEnum5. 请求体 DataSyncQo6. 同步数据控制层 AppSyncDataController7. 同步数据业务层 XdrDataSyncServiceImpl1. 项目背景 资产可能会遭受各种网络攻击&#xff0c;安全…

[附源码]Python计算机毕业设计SSM基于JAVA语言的宠物寄养管理(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

1,4-丁炔二醇BYD物料中含有大量铜离子、二氧化硅等杂质怎么办?

1,4-丁炔二醇BYD&#xff08;but-2-yne-1,4-diol&#xff09;是一种重要的中间体化工原料&#xff0c;广泛应用于生产丁二醇及其下游产品、维生素B6的主要原料&#xff0c;还可以用于镀镍的增亮剂、防腐抑制剂等领域。 1,4&#xff0d;丁二醇&#xff08;BDO&#xff09;是一种…

[附源码]Python计算机毕业设计SSM基于web的社团管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

免费开源的图片修复工具Lama Cleaner

什么是 Lama Cleaner &#xff1f; Lama Cleaner 是由 SOTA AI 模型提供支持的图像修复工具。可以从图片中移除任何不需要的物体、缺陷和人&#xff0c;或者擦除并替换&#xff08;powered by stable diffusion&#xff09;图片上的任何东西。 看看官方提供的视频&#xff0c;应…

图片怎么转换成PDF格式?这两种方法都可以实现转换

怎么把图片转换成PDF格式呢&#xff1f;大家在日常中也会经常使用到图片&#xff0c;不管是出门游玩还是办公学习&#xff0c;图片都会给我们带来极大的便利。但是一旦图片的数量多了起来&#xff0c;我们又不能删除&#xff0c;那么这些图片的存放就是一个关键的问题&#xff…

[附源码]计算机毕业设计的小说阅读系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…

“数据湖存储”冠军杯足球赛开幕,腾讯云存储出征!

“数据湖存储”冠军杯是数据湖领域内的世界级赛事&#xff0c;随着云上“数据湖存储”产品理念的逐步普及&#xff0c;今年的比赛也获得了国内外众多球迷的关注。腾讯云以COS、GooseFS、GooseFSx、元数据加速器、COS加速器等球员组成的球队一路披荆斩棘&#xff0c;成为最闪耀的…

化工集团公司安全风险智能化管控平台

加快数字化发展&#xff0c;大力推进信息化、工业化融合&#xff0c;是国家新时代、新阶段作出的重要决策部署&#xff0c;是化工集团公司打造世界领先企业的必由之路。要充分认识加快数字化发展的重要性紧迫性。要锚定集团公司数字化转型升级的总目标&#xff0c;坚持顶层设计…

Java 开发如何通过 IoT 边缘 ModuleSDK 进行协议转换

操作场景 使用 ModuleSDK 开发插件应用&#xff0c;接入其他协议设备&#xff08;如 HTTP 请求数据&#xff09;&#xff0c;将其他协议的数据转化为 MQTT 协议 JSON 数据上报到 IoTDA。 代码解析 项目结构如下 ModbusDriver 代码解析 片段一 通过 DriverClient.createFromEnv…

[附源码]Nodejs计算机毕业设计基于Web课堂签到管理系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

web开发框可以为提升办公效率赋能吗?

提升办公效率可以引用专业的web开发框架&#xff0c;值得一提的是&#xff0c;随着数字化时代的到来&#xff0c;要想做好数据管理&#xff0c;低代码开发平台功不可没&#xff0c;在做好数据管理的过程中发挥了重要的应用价值。研发低代码开发平台&#xff0c;流辰信息一直都以…

从BI到ABI,守正创新的思迈特软件持续推进国产BI产业创新

‍‍数据智能产业创新服务媒体——聚焦数智 改变商业近年来&#xff0c;国内外数字化转型加速渗透&#xff0c;企业客户已不再满足“用上”数据&#xff0c;能否“用好”数据、提升管理效率成为企业数字化转型的核心诉求。在提升企业管理效率的工具中&#xff0c;商业智能&…

Linux C编程一站式学习笔记1

Linux C编程一站式学习笔记 chap1程序的基本概念 打算重学计算机&#xff0c;重学C语言 这本书的前言写的真好 实在是惭愧… 文章目录Linux C编程一站式学习笔记 chap1程序的基本概念一.程序和编程语言1.什么是程序2.程序由指令组成3.编程语言编译执行过程解释执行过程本节总结…

力扣(LeetCode)1697. 检查边长度限制的路径是否存在(C++)

并查集离线查询 由于评测系统对 vectorvectorvector 的排序可能较慢&#xff0c;使用结构体保存 vectorvectorvector &#xff0c;接下来的查询和边集就对结构体操作。 结构体的属性 aaa 点 、 bbb 点 、ccc 长度、 ddd 顺序。重载 <<< &#xff0c;排序时按照 ccc …

ssm+Vue计算机毕业设计校园图书漂流系统(程序+LW文档)

ssmVue计算机毕业设计校园图书漂流系统&#xff08;程序LW文档&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技…

C++基础篇之什么是 数据结构

&#x1f4d2;博客主页&#xff1a; ​​开心档博客主页​​ &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐留言&#x1f4dd; &#x1f4cc;本文由开心档原创&#xff01; &#x1f4c6;51CTO首发时间&#xff1a;&#x1f334;2022年12月12日&#x1f334; ✉…