Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS&;Swift-如何从用户处获取并保存UIImage?_Ios_Swift_Uiimage_Xcode6_Camera Roll - Fatal编程技术网

iOS&;Swift-如何从用户处获取并保存UIImage?

iOS&;Swift-如何从用户处获取并保存UIImage?,ios,swift,uiimage,xcode6,camera-roll,Ios,Swift,Uiimage,Xcode6,Camera Roll,我正在为iOS编写一个Swift应用程序。我想知道如何从用户的相机卷(或他们现在叫它的任何东西)中获取图像,并将其保存在应用程序中的本地位置,以便我以后可以引用它。这件事怎么办?例如,假设我想获取图像,并将其设置为我的故事板中UIImageView的图像。这正是与相结合的功能 对你来说,这将是一项分为两部分的任务。首先,您必须使用UIImagePickerController捕获图像,然后将其存储在他们的照片库中,或者使用NSUserDefaults将其存储在他们的设备上 要使用NSUserDe

我正在为iOS编写一个Swift应用程序。我想知道如何从用户的相机卷(或他们现在叫它的任何东西)中获取图像,并将其保存在应用程序中的本地位置,以便我以后可以引用它。这件事怎么办?例如,假设我想获取图像,并将其设置为我的故事板中UIImageView的图像。

这正是与相结合的功能

对你来说,这将是一项分为两部分的任务。首先,您必须使用
UIImagePickerController
捕获图像,然后将其存储在他们的照片库中,或者使用
NSUserDefaults
将其存储在他们的设备上

要使用
NSUserDefaults
存储图像,请参阅。

Ray Wenderlich有一个使用
UIImagePickerController
选择图像,然后使用
AssetLibrary
保存到相册的方法


还有一些关于使用图像过滤器的信息,这些信息超出了您在本教程中的要求。

获得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)

正如Brian提到的,您应该使用
UIImagePickerController
,一旦选择了图像,就可以使用此文件管理器方法。我不建议使用
NSUserDefaults
来存储图像,因为这与:


这是我的密码

保存图像:

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
    })
}

图像的用户默认值?真的吗?这还是个坏主意。您可以将图像存储在本地沙盒中,并使用更合适的持久化机制引用它们。您应该通过文件管理器或核心数据来持久化图像。查找AlassetLibrary我认为此链接将对您有很大帮助[check here][1]:我知道的唯一不符合UIImagePickerControllerDelegate的方法是不符合UINavigationControllerDelegate。UIPicker需要一个导航控制器。@Rodrigo:只有在给出图像的完整路径时,它才能工作。
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
    })
}