IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> SwiftUI———如何使用Core Image官方滤镜(filter)来处理照片 -> 正文阅读

[移动开发]SwiftUI———如何使用Core Image官方滤镜(filter)来处理照片

苹果在Core Image API中提供了14个大类、共174个图像处理方式以及一些常见滤镜,其中一些滤镜还能处理视频甚至是实时视频,各个滤镜详情参见:https://developer.apple.com/library/archive/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIColorClamp

首先是如何看这个网页,也就是说这个网页提供了哪些信息,这对我们使用时非常有帮助的。以下面这个截图为例,来讲一下如何看。
请添加图片描述
按照各部分来介绍:

  1. 滤镜名称。一般情况下,和部分3的本地名称一样。
  2. 滤镜功能的介绍。这里是“使用盒形卷积内核模糊图像”。
  3. 这个是本地显示名称,是我们在代码中调用滤镜的时候需要使用的名称。
  4. 参数及参数介绍。这是我们在调用滤镜时需要告诉代码的一些信息,比如这里的inputImage是输入的图片,几乎每个滤镜都会有这个参数。这里的inputRadius是滤镜模糊的程度,如果我们不做调整也就是默认值10.00。不同滤镜的参数都不一样,要自己在使用的时候查阅一下。使用的时候名称需要变形一下,需要加上加上kCI-和-Key,这个等会使用的时候细说。
  5. 这部分是滤镜所属的大类,看网页的时候可以发现苹果将其分成多个大类,我们可以通过查看这里的大类来查找相似的。但是我们会发现这里有的大类已经没有了,可能是苹果删除调整了一些滤镜和大类,但是每个滤镜下的还没有调整。
  6. 滤镜的使用效果。大部分滤镜都会有这部分来展示使用效果。
  7. 可以使用这些滤镜的系统。由于这些API都很早了,所以目前的设备都是可以使用的。

苹果将其分成17个大类,如下:

  • CICategoryBlur(模糊)
  • CICategoryColorAdjustment(颜色调整)
  • CICategoryColorEffect(颜色特效)
  • CICategoryCompositeOperation(合成操作)
  • CICategoryDistortionEffect(变形特效)
  • CICategoryGenerator(生成,例如条形码二维码)
  • CICategoryGeometryAdjustment(几何调整)
  • CICategoryGradient(渐变)
  • CICategoryHalftoneEffect(网格特效)
  • CICategoryReduction(简化图片)
  • CICategorySharpen(锐化图片)
  • CICategoryStylize(风格化图片,就是杂项)
  • CICategoryTileEffect(瓦片特效)
  • CICategoryTransition(过渡、渐变)
  • 各位可以根据需求去查找自己需要的。

接下来我们具体说说,在SwiftUI中如何使用这些官方提供的filter(滤镜或者处理方式)。
首先我们需要创建一个函数,来调用filter API,就调用刚才举例子的CIBoxBlur吧。头文件是import SwiftUI即可。我对几乎每一行代码都进行了注释,以确保各位都能很好的理解:

func blurFilter(inputImage: UIImage) -> UIImage {
    //创建一个CIContext(),用来放置处理后的内容
    let context = CIContext()
    //将输入的UIImage转变成CIImage
    let inputCIImage = CIImage(image: inputImage)!
    
    //创建用于处理图片的滤镜(Filter)
    let filter = CIFilter(name: "CIBoxBlur")!
    //这个setValue设置值的时候,后面的forKey参数跟的是文档给的参数的名字的变形,比如这里官网给的是inputRadius,加上kCI-和-Key就是应该填的参数了。
    //这里设置模糊度————也可以不写这个,就会按照默认的来
    filter.setValue(10, forKey: kCIInputRadiusKey)
    //设置输入图片
    filter.setValue(inputCIImage, forKey: kCIInputImageKey)

    // 获取经过滤镜处理之后的图片,并且将其放置在开头设置好的CIContext()中
    let result = filter.outputImage!
    let cgImage = context.createCGImage(result, from: result.extent)
    
    //返回处理好的图片
    return UIImage(cgImage: cgImage!)
}

这时候我们就可以很简单的使用这个滤镜了,如下:

//设置输入的图片
let image: UIImage = UIImage(named: "test")!

//获取输出图片
let outputImage = blurFilter(inputImage: image)

struct FilterView: View {
    var body: some View {
        Image(uiImage: outputImage)
            .resizable()
    }
}

我们就能看到处理之后的图片显示在屏幕上啦!我们来处理一下之前的截图。
请添加图片描述
效果还不错!

由于这些API都非常古早了,和SwiftUI搭配使用会有一些小坑,之前查阅了半天没找到解决办法,也是自己研究了才发现解决之道。
但是别看是很老的API,一些效果也过时了,就觉得这个没啥用。他们是可以嵌套的,就能做出更多的效果。

获取系统相册里的照片请查看:https://blog.csdn.net/qq_33919450/article/details/121792908
调用系统相机拍照请查看:https://blog.csdn.net/qq_33919450/article/details/121860731

希望可以帮助到有需要的人哦~

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-11 15:50:25  更:2021-12-11 15:51:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:01:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码