Skip to content

Instantly share code, notes, and snippets.

@anupamchugh
Created November 21, 2019 18:46
Show Gist options
  • Save anupamchugh/5e77eb462deefe638017411a02aeb508 to your computer and use it in GitHub Desktop.
Save anupamchugh/5e77eb462deefe638017411a02aeb508 to your computer and use it in GitHub Desktop.
func processLivePhoto(livePhoto: PHLivePhoto)
{
let livePhotoResources = PHAssetResource.assetResources(for: livePhoto)
guard let photoDir = generateFolderForLivePhotoResources() else{ return }
for resource in livePhotoResources {
if resource.type == PHAssetResourceType.pairedVideo {
saveAssetResource(resource: resource, inDirectory: photoDir, buffer: nil, maybeError: nil)
}
}
}
func saveAssetResource(
resource: PHAssetResource,
inDirectory: NSURL,
buffer: NSMutableData?, maybeError: Error?
) -> Void {
guard maybeError == nil else {
return
}
let maybeExt = UTTypeCopyPreferredTagWithClass(
resource.uniformTypeIdentifier as CFString,
kUTTagClassFilenameExtension
)?.takeRetainedValue()
guard let ext = maybeExt else {
return
}
guard var fileUrl = inDirectory.appendingPathComponent(NSUUID().uuidString) else {
print("file url error")
return
}
fileUrl = fileUrl.appendingPathExtension(ext as String)
if let buffer = buffer, buffer.write(to: fileUrl, atomically: true) {
self.videoUrl = fileUrl
} else {
PHAssetResourceManager.default().writeData(for: resource, toFile: fileUrl, options: nil) { (error) in
self.videoUrl = fileUrl
}
}
}
func generateFolderForLivePhotoResources() -> NSURL? {
let photoDir = NSURL(
fileURLWithPath: NSTemporaryDirectory(),
isDirectory: true
).appendingPathComponent(NSUUID().uuidString)
let fileManager = FileManager()
let success : ()? = try? fileManager.createDirectory(
at: photoDir!,
withIntermediateDirectories: true,
attributes: nil
)
return success != nil ? photoDir! as NSURL : nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment