MediaWatermark 0.4.0

MediaWatermark 0.4.0

测试已测试
Lang语言 SwiftSwift
许可协议 MIT
发布最后发布2020年4月
SPM支持 SPM

Maintained by JowKame, Mykola Voronin.



  • By
  • Sergey Afanasiev

关于

MediaWatemark 是一个开源的 GPU/CPU 基础 iOS 水印库,用于向图像或视频内容添加重叠层。它具有简洁的界面和直接的功能。

概览

简单 & 通用

MediaWatemark 容易安装并集成到任何 iOS 项目中。它可以处理广泛的任务,非常适合在视频或其他图像上叠加视图和文本。

轻量代码

MediaWatemark 由轻量级代码组成,可以轻松地在一个图像上叠加另一个图像,或者用视频内容进行同样的操作。

易于安装

在使用此库之前,您可能想要运行以下我分享的示例项目。您准备使用它时,只需遵循以下简短的安装提示。

安装

CocoaPods

MediaWatermark 可以通过 CocoaPods 使用。要安装它,只需将以下行添加到您的 Podfile

pod "MediaWatermark"

Carthage

要使用 Carthage 将 MediaWatermark 集成到您的 Xcode 项目中,请在您的 Cartfile 中指定它

github "rubygarage/media-watermark" ~> 0.4

运行 carthage update 来构建框架,并将构建的 MediaWatermark.framework 拖到您的 Xcode 项目中。

系统要求

iOS: 9.0+
Swift: 5.0
CocoaPods:适用于 iOS
处理器概念:GPU & CPU

示例

要运行示例项目,请先克隆仓库,然后从示例目录运行 pod install。

用法

在其他图片上添加多个图片

要在不同坐标上添加两个图像并覆盖第三个图像,您可以使用以下类似代码。图像会根据您在代码中设置的坐标来放置。

if let item = MediaItem(url: url) {
    let logoImage = UIImage(named: "rglogo")
            
    let firstElement = MediaElement(image: logoImage!)
    firstElement.frame = CGRect(x: 0, y: 0, width: logoImage!.size.width, height: logoImage!.size.height)
            
    let secondElement = MediaElement(image: logoImage!)
    secondElement.frame = CGRect(x: 150, y: 150, width: logoImage!.size.width, height: logoImage!.size.height)
                        
    item.add(elements: [firstElement, secondElement])
            
    let mediaProcessor = MediaProcessor()
    mediaProcessor.processElements(item: item) { [weak self] (result, error) in
    	// handle result            
    }
}

在图像上添加图像和文本

如果您需要将图像和文本渲染到另一个图像上,下一个脚本模板将有效。

let item = MediaItem(image: image)
        
let logoImage = UIImage(named: "logo")
        
let firstElement = MediaElement(image: logoImage!)
firstElement.frame = CGRect(x: 0, y: 0, width: logoImage!.size.width, height: logoImage!.size.height)
                
let testStr = "Test Attributed String"
let attributes = [ NSForegroundColorAttributeName: UIColor.white, NSFontAttributeName: UIFont.systemFont(ofSize: 35) ]
let attrStr = NSAttributedString(string: testStr, attributes: attributes)
        
let secondElement = MediaElement(text: attrStr)
secondElement.frame = CGRect(x: 300, y: 300, width: logoImage!.size.width, height: logoImage!.size.height)
        
item.add(elements: [firstElement, secondElement])
        
let mediaProcessor = MediaProcessor()
mediaProcessor.processElements(item: item) { [weak self] (result, error) in
    self?.resultImageView.image = result.image
}

在视频上添加图像和文本

要在视频上添加图像和文本,请参阅以下代码示例

if let item = MediaItem(url: url) {
	let logoImage = UIImage(named: "logo")
            
	let firstElement = MediaElement(image: logoImage!)
	firstElement.frame = CGRect(x: 0, y: 0, width: logoImage!.size.width, height: logoImage!.size.height)
            
	let testStr = "Attributed Text"
	let attributes = [ NSForegroundColorAttributeName: UIColor.white, NSFontAttributeName: UIFont.systemFont(ofSize: 35) ]
	let attrStr = NSAttributedString(string: testStr, attributes: attributes)
            
	let secondElement = MediaElement(text: attrStr)
	secondElement.frame = CGRect(x: 300, y: 300, width: logoImage!.size.width, height: logoImage!.size.height)
            
    item.add(elements: [firstElement, secondElement])
            
    let mediaProcessor = MediaProcessor()
    mediaProcessor.processElements(item: item) { [weak self] (result, error) in
        self?.videoPlayer.url = result.processedUrl
        self?.videoPlayer.playFromBeginning()
    }
}

金属图像处理

MediaWatermark 为图像提供五种过滤器

  • 颜色过滤器
  • 棕褐色
  • 模糊
  • Sobel
  • 阈值

在图像上添加过滤器

let item = MediaItem(image: image)

let colorFilter = ColorFilter()
colorFilter.r = 1
colorFilter.g = 1
colorFilter.b = 0
        
item.applyFilter(mediaFilter: colorFilter)
        
let logoImage = UIImage(named: "logo")
        
let firstElement = MediaElement(image: logoImage!)
firstElement.frame = CGRect(x: 0, y: 0, width: logoImage!.size.width, height: logoImage!.size.height)
        
let secondElement = MediaElement(image: logoImage!)
secondElement.frame = CGRect(x: 100, y: 100, width: logoImage!.size.width, height: logoImage!.size.height)
        
item.add(elements: [firstElement, secondElement])
        
let mediaProcessor = MediaProcessor()
mediaProcessor.processElements(item: item) { [weak self] (result, error) in
    self?.resultImageView.image = result.image
}

请注意,滤镜目前只适用于图像资源。

作者

Sergey Afanasiev

寻求帮助

[email protected]

许可

MediaWatermark遵从MIT许可证。有关更多信息,请参阅LICENSE文件。


RubyGarage Logo

RubyGarage是一家领先的东欧软件开发和咨询服务公司。我们的主要专业领域包括Ruby和Ruby on Rails,但我们成功地运用其他技术为我们的客户提供最佳结果。请查看我们的作品集,了解更多令人兴奋的作品!