2014-11-02 87 views
8

我正在为iOS编写一个Swift应用程序。我想知道如何从用户的相机胶卷中获取图像(或者他们最近调用的任何图像),并将其保存在本地应用程序中,以便稍后参考。怎么会这样呢?作为一个例子,假设我想获取图像并将其设置为故事板中UIImageView的图像。iOS&Swift - 如何从用户获取并保存UIImage?

+0

查找ALAssetsLibrary – Abizern 2014-11-02 23:04:30

+0

我认为这个链接将帮助你很多[点击这里] [1] [1]:http://stackoverflow.com/questions/25730830/how-在照相机上使用照片框架 – 2014-11-03 09:58:07

回答

4

这正是UIImagePickerController加上NSUserDefaults会做的。

对你而言,它将是一个两部分任务。首先,您必须用UIImagePickerController捕捉图像,然后将其存储在其照片库中,或者将其存储在设备上,其格式为NSUserDefaults

要存储图像NSUserDefaults,请参阅this question

+10

图像的用户默认设置?真? – Abizern 2014-11-02 23:02:30

+0

@Abizern请参阅我的编辑。 – 2014-11-02 23:03:45

+0

这仍然是一个坏主意。您可以将图像存储在本地沙箱中,并使用更合适的持久性机制来引用它们。 – Abizern 2014-11-02 23:05:37

2

Ray Wenderlich有一个great tutorial用于使用UIImagePickerController选择图像,然后使用AssetsLibrary保存到相册。

还有关于使用图像过滤器的信息,超过了您在教程中要求的范围。

+0

我得到这个错误。 http://postimg.org/image/gcfwet8uf/ – quillford 2014-11-03 00:00:39

+0

我知道不符合UIImagePickerControllerDelegate的唯一方法是不符合UINavigationControllerDelegate。 UIPicker需要一个导航控制器。 – 2014-11-03 02:51:25

2

一旦你得到了UIImage对象,你可以在一个文档目录保存图像用下面的代码

let imageData = NSData(data:UIImagePNGRepresentation(wineImage.image)) 
let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true) 
var docs: String = paths[0] as! String 
let fullPath = docs.stringByAppendingPathComponent("yourNameImg.png") 
let result = imageData.writeToFile(fullPath, atomically: true) 
0

你绝对应该使用UIImagePickerController布赖恩提到的,一旦你有选择的图像使用这个文件经理方法。我不推荐使用NSUserDefaults存储图像,因为它违背了Apple guidelines

let imageData = UIImagePNGRepresentation(selectedImage) 
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String 
let imagePath = paths.stringByAppendingPathComponent("cached.png") 

if !imageData.writeToFile(imagePath, atomically: false) 
{ 
    println("not saved") 
} else { 
    println("saved") 
    NSUserDefaults.standardUserDefaults().setObject(imagePath, forKey: "imagePath") 
} 
3

这里是我的组合。

保存图像:

let imageData = NSData(data:UIImagePNGRepresentation(pickedimage)) 
let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true) 
var docs: String = paths[0] as! String 
let fullPath = docs.stringByAppendingPathComponent("yourNameImg.png") 
let result = imageData.writeToFile(fullPath, atomically: true) 

print(fullPath) 

获取图像:

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 readPath = dirPath.stringByAppendingPathComponent("yourNameImg.png") 
      let image = UIImage(contentsOfFile: readPath) 

      UploadImagePreview.image = image 
     } 
    } 
} 

我们可以从照片框架尝试获取最后保存的图像。

var fetchOptions: PHFetchOptions = PHFetchOptions() 
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)] 

var fetchResult = PHAsset.fetchAssetsWithMediaType(PHAssetMediaType.Image, options: fetchOptions) 

if (fetchResult.firstObject != nil) { 
    var lastAsset: PHAsset = fetchResult.lastObject as! PHAsset 

    PHImageManager.defaultManager().requestImageForAsset(lastAsset, targetSize: self.UploadImagePreview.bounds.size, contentMode: PHImageContentMode.AspectFill, options: PHImageRequestOptions(), resultHandler: { (result, info) -> Void in 
     self.UploadImagePreview.image = result 
    }) 
} 
+0

UIImage(contentsOfFile :)不起作用 – 2016-01-23 04:19:14

+0

@ Rodrigo:它只在给出图像的完整路径时起作用。 – 2016-01-25 06:17:33

相关问题