Harbeth
动画 | 静态 |
---|---|
![]() |
![]() |
Harbeth 是一套小巧的实用工具和扩展,用于 Apple 的 Metal 框架,旨在使您的 Swift GPU 代码更加清晰,并让您能够更快地原型化您的流水线。
英文 | 简体中文
特性
- 支持更多平台系统,包括 macOS 和 iOS。
- 高性能,快速添加以下源头的过滤器
- UIImage, NSImage, CIImage, CGImage, CMSampleBuffer, CVPixelBuffer。
- 内置的过滤器大致分为以下模块
- 自定义过滤器,并使用操作符链添加过滤器。
- 设置
MetalPerformanceShaders
过滤器,且可兼容CoreImage
过滤器。 - 来自摄象头捕获和视频添加特殊效果。
- 视频源处理视频文件。
100
种内置过滤器可供使用。✌️
目前有超过 要求
iOS 目标 | macOS 目标 | Xcode 版本 | Swift 版本 |
---|---|---|---|
iOS 10.0+ | macOS 10.13+ | Xcode 10.0+ | Swift 5.0+ |
用法
🚗 原始代码。
lazy var ImageView: UIImageView = {
let imageView = UIImageView(image: originImage)
imageView.layer.borderColor = R.color("background2")?.cgColor
imageView.layer.borderWidth = 0.5
return imageView
}()
ImageView.image = originImage
🎷 零侵入式添加过滤功能。
let filter1 = C7ColorMatrix4x4(matrix: Matrix4x4.Color.sepia)
let filter2 = C7Granularity(grain: 0.8)
let filter3 = C7SoulOut(soul: 0.7)
let filters = [filter1, filter2, filter3]
// Use:
let dest = BoxxIO.init(element: originImage, filters: filters)
// Synchronize do something..
ImageView.image = try? dest.output()
// Asynchronous do something..
dest.transmitOutput(success: { [weak self] image in
DispatchQueue.main.async {
self?.ImageView.image = image
}
})
// OR Use:
ImageView.image = try? originImage.makeGroup(filters: filters)
// OR Use Operator:
ImageView.image = originImage ->> filter1 ->> filter2 ->> filter3
相机
📸 相机捕获生成图片。
// Add an edge detection filter:
let filter = C7EdgeGlow(lineColor: .red)
// Generate camera collector:
let camera = C7CollectorCamera.init(delegate: self)
camera.captureSession.sessionPreset = AVCaptureSession.Preset.hd1280x720
camera.filters = [filter]
extension CameraViewController: C7CollectorImageDelegate {
func preview(_ collector: C7Collector, fliter image: C7Image) {
// do something..
}
}
视频
📺 本地视频或网络视频只需应用过滤器即可。🙄 详情请见 PlayerViewController。- 您还可以通过使用 BoxxIO 扩展此功能,以过滤收集到的
CVPixelBuffer
。
lazy var video: C7CollectorVideo = {
let videoURL = URL.init(string: "Link")!
let asset = AVURLAsset.init(url: videoURL)
let playerItem = AVPlayerItem.init(asset: asset)
let player = AVPlayer.init(playerItem: playerItem)
let video = C7CollectorVideo.init(player: player, delegate: self)
let filter = C7ColorMatrix4x4(matrix: Matrix4x4.Color.sepia)
video.filters = [filter]
return video
}()
self.video.play()
extension PlayerViewController: C7CollectorImageDelegate {
func preview(_ collector: C7Collector, fliter image: C7Image) {
// do something..
}
}
CocoaPods
- 如要导入 Metal 模块,请在您的 Podfile 中添加以下内容:
pod 'Harbeth'
- 如要导入 OpenCV 图像模块,请在您的 Podfile 中添加以下内容:
pod 'OpencvQueen'
Swift Package Manager
Swift Package Manager 是一个用于管理 Swift 代码分布的工具。它集成了 Swift 构建系统,以自动化下载、编译和链接依赖项的过程。
构建 Harbeth 需要 Xcode 11+,使用 Swift Package Manager.
使用 Swift Package Manager 将 Harbeth 集成到您的 Xcode 项目中,请将 Harbeth 添加到您的 Package.swift
文件中的依赖值。
dependencies: [
.package(url: "https://github.com/yangKJ/Harbeth.git", branch: "master"),
]
备注
一般过程大致如此,Demo 也写得非常详细,您可以自行查看。
🎷 提示:如果您觉得有帮助,请帮我点个赞。如果您有任何问题或需要帮助,也可以提出。
谢谢。
🎇
关于作者
🎷 电子邮件地址: [email protected]🎷 🎸 GitHub地址: yangKJ🎸
在GitHub上为我点一杯咖啡或支持我: GitHub.

许可协议
Harbeth采用MIT许可协议。更多信息请参阅LICENSE文件。