Skip to content

Instantly share code, notes, and snippets.

@ha1f
Created March 3, 2021 08:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ha1f/899cab5fae4e6955c37fc7275e8ba856 to your computer and use it in GitHub Desktop.
Save ha1f/899cab5fae4e6955c37fc7275e8ba856 to your computer and use it in GitHub Desktop.
extension AVAsset {
private func _generator(size: CGSize) -> AVAssetImageGenerator {
let generator = AVAssetImageGenerator(asset: self)
generator.maximumSize = size
generator.appliesPreferredTrackTransform = true
return generator
}
func extractUIImageAsync(size: CGSize) -> Single<UIImage?> {
let generator = _generator(size: size)
return .create { observer in
generator.generateCGImagesAsynchronously(forTimes: [NSValue(time: .zero)]) { (_, image, _, _, error) in
if let error = error {
observer(.error(error))
return
}
observer(.success(image.map(UIImage.init(cgImage:))))
}
return Disposables.create {
generator.cancelAllCGImageGeneration()
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment