如何在我的应用程序中保存图像(路径)?
How to save an image (path) within my app?
我想制作一个应用程序,用户可以在其中填写某种表格,并在其中附加一张图片。用户从图库中选择一张图片(使用 UIImagePickerController)。我已经知道如何使用 info[UIImagePickerControllerOriginalImage] as? UIImage
.
在屏幕上显示图像
我想制作一个文件,下次打开应用程序时会用到,这样可以和笔记显示相同的图像。所以最好我想保存文件的路径,以便下次我只需使用 UIImage(contentsOfFile: path)
打开它。我怎样才能得到这条路?
到目前为止我有一些不太有趣的代码:
@IBAction func chooseFromGallery(sender: AnyObject) {
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.SavedPhotosAlbum){
imagePicker.delegate = self
imagePicker.sourceType = UIImagePickerControllerSourceType.SavedPhotosAlbum;
imagePicker.allowsEditing = false
self.presentViewController(imagePicker, animated: true, completion: nil)
}
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
dismissViewControllerAnimated(true, completion: nil)
self.image.image = info[UIImagePickerControllerOriginalImage] as? UIImage // This works
self.imagePath = // What goes here?
println(self.imagePath)
}
func imagePickerControllerDidCancel(picker: UIImagePickerController) {
dismissViewControllerAnimated(true, completion: nil)
}
编辑
经过一番阅读,我发现无法获取保存在应用程序沙箱之外的图像的路径。所以每个人都在寻找同样的东西,停下来,使用 Bluehound
的答案。
有关如何在 iOS(和 OS X)中处理文件的更多信息,请阅读:https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html
这是保存图像的方法
- (IBAction)saveImage {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *savedImagePath = [documentsDirectory stringByAppendingPathComponent:@"savedImage.png"];
UIImage *image = imageView.image; // imageView is where you are displaying image after selecting one from UIImagePicker
NSData *imageData = UIImagePNGRepresentation(image);
[imageData writeToFile:savedImagePath atomically:NO];
}
您可以像这样取回这张图片
- (IBAction)getImage {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *getImagePath = [documentsDirectory stringByAppendingPathComponent:@"savedImage.png"];
UIImage *img = [UIImage imageWithContentsOfFile:getImagePath];
}
更新:
我相信你的问题标题暗示有点不同。回到你的问题,如果你打算一直只使用一个图像,你可以有一个图像名称并使用它。这将始终覆盖之前保存的图像。
否则,另一种选择可能是创建一个简单的 plist 或 db,并使用图像和时间戳来唯一标识每个图像。
Swift 保存图像的代码:
let nsDocumentDirectory = NSSearchPathDirectory.DocumentDirectory
let nsUserDomainMask = NSSearchPathDomainMask.UserDomainMask
if let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true) {
if paths.count > 0 {
if let dirPath = paths[0] as? String {
let image = ***YOUR IMAGE***
let writePath = dirPath.stringByAppendingPathComponent("Image2.png")
UIImagePNGRepresentation(image).writeToFile(writePath, atomically: true)
}
}
}
获取图像可以很容易地从相同的图像关联起来
文档目录是存放图片的好地方。您可以保存到它,然后从中检索图像。我使用这些 UIImage 扩展来保存和检索图像:
extension UIImage {
func save(fileName: String, type: String) {
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
if type.lowercaseString == "png" {
let path = "\(documentsPath)/\(fileName).\(type)"
UIImagePNGRepresentation(self).writeToFile(path, atomically: true)
} else if type.lowercaseString == "jpg" {
let path = "\(documentsPath)/\(fileName).\(type)"
UIImageJPEGRepresentation(self, 1.0).writeToFile(path, atomically: true)
} else {
}
}
convenience init?(fileName: String, type: String) {
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
let path = "\(documentsPath)\(fileName).\(type)"
self.init(contentsOfFile: path)
}
}
使用它,我可以使用一些数据存储方法(例如 Core Data)存储文件名而不是图像的整个路径。
使用:
someImage.save("SomeName" , type: "png")
if let image = UIImage(fileName: "SomeName", type: "png") {
}
我想制作一个应用程序,用户可以在其中填写某种表格,并在其中附加一张图片。用户从图库中选择一张图片(使用 UIImagePickerController)。我已经知道如何使用 info[UIImagePickerControllerOriginalImage] as? UIImage
.
我想制作一个文件,下次打开应用程序时会用到,这样可以和笔记显示相同的图像。所以最好我想保存文件的路径,以便下次我只需使用 UIImage(contentsOfFile: path)
打开它。我怎样才能得到这条路?
到目前为止我有一些不太有趣的代码:
@IBAction func chooseFromGallery(sender: AnyObject) {
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.SavedPhotosAlbum){
imagePicker.delegate = self
imagePicker.sourceType = UIImagePickerControllerSourceType.SavedPhotosAlbum;
imagePicker.allowsEditing = false
self.presentViewController(imagePicker, animated: true, completion: nil)
}
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
dismissViewControllerAnimated(true, completion: nil)
self.image.image = info[UIImagePickerControllerOriginalImage] as? UIImage // This works
self.imagePath = // What goes here?
println(self.imagePath)
}
func imagePickerControllerDidCancel(picker: UIImagePickerController) {
dismissViewControllerAnimated(true, completion: nil)
}
编辑
经过一番阅读,我发现无法获取保存在应用程序沙箱之外的图像的路径。所以每个人都在寻找同样的东西,停下来,使用 Bluehound
的答案。
有关如何在 iOS(和 OS X)中处理文件的更多信息,请阅读:https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html
这是保存图像的方法
- (IBAction)saveImage {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *savedImagePath = [documentsDirectory stringByAppendingPathComponent:@"savedImage.png"];
UIImage *image = imageView.image; // imageView is where you are displaying image after selecting one from UIImagePicker
NSData *imageData = UIImagePNGRepresentation(image);
[imageData writeToFile:savedImagePath atomically:NO];
}
您可以像这样取回这张图片
- (IBAction)getImage {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *getImagePath = [documentsDirectory stringByAppendingPathComponent:@"savedImage.png"];
UIImage *img = [UIImage imageWithContentsOfFile:getImagePath];
}
更新:
我相信你的问题标题暗示有点不同。回到你的问题,如果你打算一直只使用一个图像,你可以有一个图像名称并使用它。这将始终覆盖之前保存的图像。
否则,另一种选择可能是创建一个简单的 plist 或 db,并使用图像和时间戳来唯一标识每个图像。
Swift 保存图像的代码:
let nsDocumentDirectory = NSSearchPathDirectory.DocumentDirectory
let nsUserDomainMask = NSSearchPathDomainMask.UserDomainMask
if let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true) {
if paths.count > 0 {
if let dirPath = paths[0] as? String {
let image = ***YOUR IMAGE***
let writePath = dirPath.stringByAppendingPathComponent("Image2.png")
UIImagePNGRepresentation(image).writeToFile(writePath, atomically: true)
}
}
}
获取图像可以很容易地从相同的图像关联起来
文档目录是存放图片的好地方。您可以保存到它,然后从中检索图像。我使用这些 UIImage 扩展来保存和检索图像:
extension UIImage {
func save(fileName: String, type: String) {
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
if type.lowercaseString == "png" {
let path = "\(documentsPath)/\(fileName).\(type)"
UIImagePNGRepresentation(self).writeToFile(path, atomically: true)
} else if type.lowercaseString == "jpg" {
let path = "\(documentsPath)/\(fileName).\(type)"
UIImageJPEGRepresentation(self, 1.0).writeToFile(path, atomically: true)
} else {
}
}
convenience init?(fileName: String, type: String) {
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
let path = "\(documentsPath)\(fileName).\(type)"
self.init(contentsOfFile: path)
}
}
使用它,我可以使用一些数据存储方法(例如 Core Data)存储文件名而不是图像的整个路径。
使用:
someImage.save("SomeName" , type: "png")
if let image = UIImage(fileName: "SomeName", type: "png") {
}