如何从本地path加载图像ios swift(按path)

在我的应用程序中,我将图像存储在本地存储中,并将该图像的path保存在数据库中。 我怎样才能从该path加载图像?

这里是我用来保存图像的代码:

let myimage : UIImage = UIImage(data: data)! let fileManager = NSFileManager.defaultManager() let urls = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask) let documentDirectory = urls[0] as NSURL print(documentDirectory) let currentDate = NSDate() let dateFormatter = NSDateFormatter() dateFormatter.dateStyle = .NoStyle dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" let convertedDate = dateFormatter.stringFromDate(currentDate) let imageURL = documentDirectory.URLByAppendingPathComponent(convertedDate) imageUrlPath = imageURL.absoluteString print(imageUrlPath) UIImageJPEGRepresentation(myimage,1.0)!.writeToFile(imageUrlPath, atomically: true) 

这是我的图像存储的path

 file:///var/mobile/Containers/Data/Application/B2A1EE50-D800-4BB0-B475-6C7F210C913C/Documents/2016-06-01%2021:49:32 

这是我试图检索图像,但它不显示任何东西。

 let image : String = person?.valueForKey("image_local_path") as! String print(person!.valueForKey("image_local_path")! as! String) cell.img_message_music.image = UIImage(contentsOfFile: image) 

文件夹/ B2A1EE50- …每次运行应用程序时都会更改。

 ../Application/B2A1EE50-D800-4BB0-B475-6C7F210C913C/Documents/.. 

这对我的作品是存储文件名和获取文件的文件夹。

Swift 3 +

创build目录文件夹的getter

 var documentsUrl: URL { return FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! } 

保存图片 :

 private func save(image: UIImage) -> String? { let fileName = "FileName" let fileURL = documentsUrl.appendingPathComponent(fileName) if let imageData = UIImageJPEGRepresentation(image, 1.0) { try? imageData.write(to: fileURL, options: .atomic) return fileName // ----> Save fileName } print("Error saving image") return nil } 

加载图片:

 private func load(fileName: String) -> UIImage? { let fileURL = documentsUrl.appendingPathComponent(fileName) do { let imageData = try Data(contentsOf: fileURL) return UIImage(data: imageData) } catch { print("Error loading image : \(error)") } return nil } 

你也可以试试这个。

  1. 检查你的path是否存在

if NSFileManager.defaultManager().fileExistsAtPath(imageUrlPath) {}

  1. 创build一个URL到你的path

let url = NSURL(string: imageUrlPath)

  1. 创build数据给你的url

let data = NSData(contentsOfURL: url!)

  1. 将url绑定到您的imageView

imageView.image = UIImage(data: data!)

最终代码

 if NSFileManager.defaultManager().fileExistsAtPath(imageUrlPath) { let url = NSURL(string: imageUrlPath) let data = NSData(contentsOfURL: url!) imageView.image = UIImage(data: data!) } 

这个示例代码可以帮助某些人打字,

在你自己的目录下写一个UIImage到磁盘:

 IM = UIImage, your image. for example, IM = someUIView.image or from the camera let newPhotoFileName = randomNameString() + ".jpeg" let imagePath = checkedImageDirectoryStringPath() + "/" + newPhotoFileName let imData = UIImageJPEGRepresentation(IM, 0.20) FileManager.default.createFile(atPath: imagePath, contents: imData, attributes: nil) print("saved at filename \(newPhotoFileName)") 

后来阅读该图像…

..并将其转换回UIImage在UIImageView中

 NAME = that filename, like jahgfdfs.jpg let p = checkedImageDirectoryStringPath() + "/" + NAME devCheckExists(fullPath: p) var imageData: Data? = nil do { let u = URL(fileURLWithPath: p) imageData = try Data(contentsOf: u) } catch { print("catastrophe loading file?? \(error)") return } // and then to "make that an image again"... imageData != nil { picture.image = UIImage(data: imageData!) print("that seemed to work") } else { print("the imageData is nil?") } // or for example... Alamofire.upload( multipartFormData: { (multipartFormData) in multipartFormData.append(imageData!, withName: "file", fileName: "", mimeType: "image/jpeg") ... 

这里是上面使用的非常方便的function…

 func checkedImageDirectoryStringPath()->String { // create/check OUR OWN IMAGE DIRECTORY for use of this app. let paths = NSSearchPathForDirectoriesInDomains( .documentDirectory, .userDomainMask, true) if paths.count < 1 { print("some sort of disaster finding the our Image Directory - giving up") return "x" // any return will lead to disaster, so just do that // (it will then gracefully fail when you "try" to write etc) } let docDirPath: String = paths.first! let ourDirectoryPath = docDirPath.appending("/YourCompanyName") // so simply makes a directory called "YourCompanyName" // which will be there for all time, for your use var ocb: ObjCBool = true let exists = FileManager.default.fileExists( atPath: ourDirectoryPath, isDirectory: &ocb) if !exists { do { try FileManager.default.createDirectory( atPath: ourDirectoryPath, withIntermediateDirectories: false, attributes: nil) print("we did create our Image Directory, for the first time.") // never need to again return ourDirectoryPath } catch { print(error.localizedDescription) print("disaster trying to make our Image Directory?") return "x" // any return will lead to disaster, so just do that } } else { // already exists, as usual. return ourDirectoryPath } } 

 func randomNameString(length: Int = 7)->String{ enum s { static let c = Array("abcdefghjklmnpqrstuvwxyz12345789".characters) static let k = UInt32(c.count) } var result = [Character](repeating: "a", count: length) for i in 0..<length { let r = Int(arc4random_uniform(sk)) result[i] = sc[r] } return String(result) } 

 func devCheckExists(fullPath: String) { var ocb: ObjCBool = false let itExists = FileManager.default.fileExists(atPath: fullPath, isDirectory: &ocb) if !itExists { // alert developer. processes will fail at next step print("\n\nDOES NOT EXIST\n\(fullPath)\n\n") } } 

pathreplaceabsoluteString

 let myimage : UIImage = UIImage(data: data)! let fileManager = NSFileManager.defaultManager() let urls = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask) let documentDirectory = urls[0] as NSURL print(documentDirectory) let currentDate = NSDate() let dateFormatter = NSDateFormatter() dateFormatter.dateStyle = .NoStyle dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" let convertedDate = dateFormatter.stringFromDate(currentDate) let imageURL = documentDirectory.URLByAppendingPathComponent(convertedDate) imageUrlPath = imageURL.path print(imageUrlPath) UIImageJPEGRepresentation(myimage,1.0)!.writeToFile(imageUrlPath, atomically: true)