如何在 Swift 中保存从 UIImagePickerController 中选取的图像?

2023-11-29

我正在构建一个应用程序,让用户从其照片库中选择图像。我正在使用这段代码来保存它。

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) {
    imgPicker.dismissViewControllerAnimated(true, completion: nil)
    NSUserDefaults.standardUserDefaults().setValue(image, forKey: "bgImage")
}

func imagePickerControllerDidCancel(picker: UIImagePickerController) {
    imgPicker.dismissViewControllerAnimated(true, completion: nil)
}

我后来发现你不能用 NSUserDefaults 保存图像,但你可以保存所选图像的路径,保存它并使用“if let ...”加载它

但我不知道该怎么做(找到路径并保存)。这个想法是让用户选择视图背景图像,有点像 Whatsapp 的做法。

如果我错了并且您无法存储路径,是否有任何简单的方法可以在不使用在线服务器的情况下保存选取的图像?


您可以使用 NSUserDefaults 保存和检索它:

//Save image
let img = UIImage() //Change to be from UIPicker
let data = UIImagePNGRepresentation(img)
NSUserDefaults.standardUserDefaults().setObject(data, forKey: "myImageKey")
NSUserDefaults.standardUserDefaults().synchronize()

//Get image
if let imgData = NSUserDefaults.standardUserDefaults().objectForKey("myImageKey") as? NSData {
    let retrievedImg = UIImage(data: imgData)
}

或者,如果您愿意,您可以读取/写入文件:

//Save image
let img = UIImage() //Change to be from UIPicker
let data = UIImagePNGRepresentation(img)!
do {
    let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
    try data.writeToFile("\(documentsPath)myImage", options: [])

} catch {
    print("Error")
}

//Get image
do {
    let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
    let readData = try NSData(contentsOfFile: "\(documentsPath)myImage", options: [])
    let retreivedImage = UIImage(data: readData)
}
catch {
    print("Error")
}

Swift 3:

//Save image
let data = UIImagePNGRepresentation(pickedImage)!
do {
    let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
    try data.write(to: URL(string: "\(documentsPath)/myImage")!, options: .atomic)
} catch {
    print("Error")
}

//Get image
do {
    let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
    let readData = try Data(contentsOf: URL(string: "\(documentsPath)/myImage")!)
    let retreivedImage = UIImage(data: readData)
} catch {
    print("Error")
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Swift 中保存从 UIImagePickerController 中选取的图像? 的相关文章

  • HTML5 地理定位 - 在 iOS 上无法始终工作

    目前正在使用 HTML5 地理定位 我已经在所有网络浏览器上测试了它 它似乎工作正常 然而 当我在 iPad 上测试地理定位时 它在 iPad mini 上始终有效 但当我将其放在更大的 iPad iPad 2 上时 位置似乎并不总是有效
  • 小部件配置在 macOS 上不起作用

    我为我的 iOS 应用程序制作了一个小部件 效果很好 现在我正在将其移植到我的 macOS 应用程序中 但不知何故 小部件配置不起作用 这些项目已显示 但我无法以某种方式选择它们 查看屏幕截图 但请看一下我制作的视频 https youtu
  • 使用 AVAssetExportSession 导出延时会导致黑色视频

    我需要能够合并使用 iOS 上的相机应用程序中的延时拍摄功能拍摄的视频并导出为单个视频 但是 即使我尝试将单个未更改的延时视频导出到照片库 它也会保存为全黑视频 具有正确的持续时间 以下是我编写的示例代码 用于导出单个未更改的视频 其中大部
  • xcode 5.1 中的 ios 6.0 模拟器

    我刚刚成功将 Xcode 工具更新到 5 1 版本 当我检查首选项部分中的 下载 选项时 我注意到没有下载 ios 6 0 模拟器的选项 请检查附图 那么如何在Xcode 5 1中访问ios 6 0模拟器呢 请按照此程序升级您的 xCode
  • 从 RemoteIO 录制到 AAC:数据正在写入,但文件无法播放

    我一直在尝试从 iPad 2 上的 iOS 5 中的 renderCallback 中直接从 RemoteIO 单元录制到 AAC 我看到了相互矛盾的信息 说这是不可能的 但这是可能的 在评论中 here http atastypixel
  • 有关 UnsafeMutablePointer 的 destroy() 的术语

    Destroy the object the pointer points to Precondition the memory is initialized Postcondition the value has been destroy
  • 如何更改故事板的初始视图控制器?

    我有2个视图控制器 我禁用了第一个视图控制器的初始视图控制器 并启用了第二个视图控制器 但是当启动项目时 初始视图控制器仍然是第一个视图控制器 我该怎么办 谢谢 点击第二个视图控制器 然后选择 Is initial View Control
  • UIAlertView 之上的 UIView

    在我的应用程序中 使用了锁定屏幕 有时一个UIAlertView如图所示 现在当用户将应用程序发送到后台并再次将其置于前面时 UIAlertview会显示在锁定屏幕上方 是否有可能添加一个UIViewController的观点高于一切 即高
  • Swift 3 中来自路径或文件名的 UIImage

    我的应用程序的文档目录中有一堆图像 我想将其中之一加载到我认为的 UIImage 中 这就是我所做的 myImage image UIImage named image jpg the file exist but this returns
  • 使用 Swift 过滤 Realm 对象

    尝试使用以下方法过滤我的领域数据库时 我总是收到以下错误NSPredicate 属性 text 不是类型 getType 对象中的链接 我想过滤我的领域数据库以仅显示其中包含某些特定文本的项目 这是我尝试过的 let realm try R
  • iOS 版有 Parse.com 的替代品吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我目前使用 parse com 来管理用户 他们有很棒的 AP I 有不错的后端供我管理东西 但我更愿意托管我自己的数据 服务器后端 我可
  • “StorageReference”类型的值没有成员“put”[重复]

    这个问题在这里已经有答案了 我更新到 firebase storage 4 0 现在收到此错误 指出 storageRef 没有成员 put 它以前在旧版本的 Firebase 中有效 if let selectedImage select
  • 搜索栏与节标题视图重叠

    我将搜索栏放在 tableHeaderView 内 在 iphone 6 上一切正常 但在 iphone 5s 上我得到这个奇怪的结果 override func viewDidLoad super viewDidLoad tableVie
  • @interface 中的 Objective-c 特定 iOS 版本

    我正在尝试实现Apple Pay 并且我尝试实现两种方法 一种用于iOS10 一种用于iOS11 所以在我的实现中我有 void paymentAuthorizationViewController PKPaymentAuthorizati
  • 如果在系统设置中关闭隐藏式字幕,则不会显示字幕

    我正在尝试显示字幕 无论设备在辅助功能下设置了什么 目前 如果设备设置为英语并在设置中启用隐藏式字幕 则将播放英语字幕 如果设备设置为西班牙语 则将播放西班牙语字幕 我希望无论隐藏式字幕是否打开 都能播放字幕 我尝试添加这段代码 https
  • 在 Swift 中的类扩展函数中使用“self”

    我希望能够从 Nib 中提取 UIView 子类的实例 我希望能够调用 MyCustomView instantiateFromNib 并拥有 MyCustomView 的实例 我几乎准备好通过桥接标头移植我所拥有的工作 Objective
  • 验证 iOS 应用程序时出现 com.apple.developer.linked-domains 问题

    当我在 Xcode 中使用 Organizer 验证我的项目时 出现以下错误 无效的代码签名权利 你的申请包的签名包含代码签名权利iOS 上不支持的 具体来说 值 for key com apple developer associated
  • 修剪 UIImage 边框

    这是我想要修剪的图像的示例 我想去掉图像周围的边框 在本例中是顶部和底部的黑条 我在Github上找到了一个库 CKImageAdditions https github com cmkilger CKImageAdditions 但是它似
  • 是否可以使用 UITableViewStylePlain 禁用 UITableView 中的浮动标题?

    我正在使用一个UITableView布局内容 页面 我使用表视图的标题来布局某些图像等 如果它们不浮动而是保持静态 就像样式设置为时那样 我更喜欢它UITableViewStyleGrouped 其他则使用UITableViewStyleG
  • 快速从 RSS feed 获取 img url

    我希望能够从一段字符串中检索 img url 以下是我尝试检索的 img URL 的示例 p img width 357 height 500 src http images sgcafe net 2015 05 OVA1 357x500

随机推荐