如何将UIImage保存到文档目录?

我正在尝试将录制video的文件路径和缩略图从video保存到文档目录。 然后,使用文件路径将这两个值设置为对象,以便我可以使用该对象填充集合视图。 使用我目前(下面)的代码,在录制video后,video路径被保存到文档目录,video路径和缩略图被设置为我的Post对象,缩略图在我的集合视图中正确显示。 到目前为止都很好。

但是,只有video路径在应用程序重新启动之间持续存在,因为它位于目录中,而缩略图则不然。 我也想在那里保存缩略图,但我不知道如何去做,因为看起来你只能写URL到目录。

这是我第一次使用文档目录,所以任何帮助将不胜感激! 如何将缩略图(UIImage)与其来自的video一起写入我的文档目录?

到目前为止,这是我的代码:

 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { let mediaType = info[UIImagePickerControllerMediaType] as! NSString dismiss(animated: true, completion: nil) if mediaType == kUTTypeMovie { // Componenets for a unique ID for the video var uniqueVideoID = "" var videoURL:NSURL? = NSURL() var uniqueID = "" uniqueID = NSUUID().uuidString // Get the path as URL videoURL = info[UIImagePickerControllerMediaURL] as? URL as NSURL? let myVideoVarData = try! Data(contentsOf: videoURL! as URL) // Write the video to the Document Directory at myVideoVarData (and set the video's unique ID) let docPaths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true) let documentsDirectory: AnyObject = docPaths[0] as AnyObject uniqueVideoID = uniqueID + "VIDEO.MOV" let docDataPath = documentsDirectory.appendingPathComponent(uniqueVideoID) as String try? myVideoVarData.write(to: URL(fileURLWithPath: docDataPath), options: []) print("docDataPath under picker ", docDataPath) print("Video saved to documents directory") // Create a thumbnail image from the video (first frame) let asset = AVAsset(url: URL(fileURLWithPath: docDataPath)) let assetImageGenerate = AVAssetImageGenerator(asset: asset) assetImageGenerate.appliesPreferredTrackTransform = true let time = CMTimeMake(asset.duration.value / 3, asset.duration.timescale) if let videoImage = try? assetImageGenerate.copyCGImage(at: time, actualTime: nil) { // Add thumbnail & video path to Post object let video = Post(pathToVideo: URL(fileURLWithPath: docDataPath), thumbnail: UIImage(cgImage: videoImage)) posts.append(video) print("Video saved to Post object") } } } 

就这么简单:

 func saveImageToDocumentDirectory(_ chosenImage: UIImage) -> String { let directoryPath = NSHomeDirectory().appending("/Documents/") if !FileManager.default.fileExists(atPath: directoryPath) { do { try FileManager.default.createDirectory(at: NSURL.fileURL(withPath: directoryPath), withIntermediateDirectories: true, attributes: nil) } catch { print(error) } } let filename = NSDate().string(withDateFormatter: yyyytoss).appending(".jpg") let filepath = directoryPath.appending(filename) let url = NSURL.fileURL(withPath: filepath) do { try UIImageJPEGRepresentation(chosenImage, 1.0)?.write(to: url, options: .atomic) return String.init("/Documents/\(filename)") } catch { print(error) print("file cant not be save at path \(filepath), with error : \(error)"); return filepath } } 

一个建议:如果可以按照苹果的指南再次下载图像,则将图像保存到库/缓存中。