1.info中写上

NSCameraUsageDescription

需要您的同意才能读取媒体资料库

NSLocationWhenInUseUsageDescription

需要您的同意才能读取媒体资料库

NSPhotoLibraryUsageDescription

需要您的同意才能读取媒体资料库

Privacy - Photo Library Usage Description

需要您的同意才能读取媒体资料库

2.保存

import Photos

//操作结果枚举

enum PhotoAlbumUtilResult {

case success, error, denied

}

//相册操作工具类

class PhotoAlbumUtil: NSObject {

public typealias completion = ((_ result: PhotoAlbumUtilResult) -> ())

//判断是否授权

class func isAuthorized() -> Bool {

return PHPhotoLibrary.authorizationStatus() == .authorized ||

PHPhotoLibrary.authorizationStatus() == .notDetermined

}

//保存图片到相册

class func saveImageInAlbum(image: UIImage, albumName: String,

completion: completion?) {

//权限验证

if !isAuthorized() {

completion?(.denied)

return

}

var assetAlbum: PHAssetCollection?

//如果指定的相册名称为空,则保存到相机胶卷。(否则保存到指定相册)

if albumName.isEmpty {

let list = PHAssetCollection

.fetchAssetCollections(with: .smartAlbum, subtype: .smartAlbumUserLibrary,

options: nil)

assetAlbum = list[0]

} else {

//看保存的指定相册是否存在

let list = PHAssetCollection

.fetchAssetCollections(with: .album, subtype: .any, options: nil)

list.enumerateObjects({ (album, index, stop) in

let assetCollection = album

if albumName == assetCollection.localizedTitle {

assetAlbum = assetCollection

stop.initialize(to: true)

}

})

//不存在的话则创建该相册

if assetAlbum == nil {

PHPhotoLibrary.shared().performChanges({

PHAssetCollectionChangeRequest

.creationRequestForAssetCollection(withTitle: albumName)

}, completionHandler: { (isSuccess, error) in

self.saveImageInAlbum(image: image, albumName: albumName,

completion: completion)

})

return

}

}

//保存图片

PHPhotoLibrary.shared().performChanges({

//添加的相机胶卷

let result = PHAssetChangeRequest.creationRequestForAsset(from: image)

//是否要添加到相簿

if !albumName.isEmpty {

let assetPlaceholder = result.placeholderForCreatedAsset

let albumChangeRequset = PHAssetCollectionChangeRequest(for:

assetAlbum!)

albumChangeRequset!.addAssets([assetPlaceholder!] as NSArray)

}

}) { (isSuccess: Bool, error: Error?) in

if isSuccess {

completion?(.success)

} else{

print(error!.localizedDescription)

completion?(.error)

}

}

}

}

3.使用

PhotoAlbumUtil.saveImageInAlbum(image: image, albumName: "APP") { (result) in

DispatchQueue.main.async {

switch result{

case .success:

//"保存成功"

break

case .denied:

//没有权限,去设置里打开权限

let a = MyAlertController()

a.addOKView("去设置"){ (a) in

let url = URL(string: UIApplicationOpenSettingsURLString)

if let url = url, UIApplication.shared.canOpenURL(url) {

if #available(iOS 10, *) {

UIApplication.shared.open(url, options: [:],

completionHandler: {

(success) in

})

} else {

UIApplication.shared.openURL(url)

}

}

}

a.addCancelView()

a.show(self,title: "没有相册权限",message: "请您到 \"设置\" -> \"APP\" 开启相册权限", style: .alert )

break

case .error:

//"保存失败"

}

}

}

swift 将图片保存到本地_swift3.0 保存图片到本地,申请权限相关推荐

  1. swift 将图片保存到本地_如何保存微博的所有图片链接并下载图片到本地

    点击上方 月小水长 并 设为星标,第一时间接收干货推送 这是 月小水长 的第 47 篇原创干货 对于一个爬虫,其爬取的目标不仅限于文字,图片.语音.视频均有可能,我开源的微博爬虫之话题爬虫,设定之初就 ...

  2. Android系统版本在6.0+以上需要动态申请权限

    在Androidmanifest.xml里申请过还不够,还需要在Mainactivity里动态申请.调试时报错有2种,不能创建父目录和连接超时.好用的框架有com.github.dfqin:grant ...

  3. swift 将图片保存到本地_swift 图片存储到本地文件的搜索结果-阿里云开发者社区...

    iOS - UIImageView 前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIImageView : UIView @available(iOS 2.0, ...

  4. swift 将图片保存到本地_Swift实现截屏并保存相册

    func saveToLocal() { //截屏 let screenRect = UIScreen.mainScreen().bounds UIGraphicsBeginImageContext( ...

  5. swift 将图片保存到本地_Swift - 保存图片到系统相册(相机胶卷),并获取存放路径、缩略图...

    (本文代码已升级至Swift3) 有时我们需要把图像(比如:从网络上获取的图片.程序自己生成的图片等)保存到系统相册(照片)中,通常有两种办法:一是使用 UIImageWriteToSavedPhot ...

  6. python图片保存_Python中读取,显示,保存图片的方法

    一 opencv importcv2 as cv#load img =cv.imread(imagepath)#shape=(height, width, channel) h,w,c =img.sh ...

  7. [高通SDM450][Android9.0]CTA认证--拆分申请权限分组

    文章目录 开发平台基本信息 问题描述 解决方法 开发平台基本信息 芯片: SDM450 版本: Android 9.0 kernel: msm-4.9 问题描述 设备在进行入网认证的时候,实验室要求应 ...

  8. Android开发手电筒(支持6.0以上系统智能申请权限)

    手电筒小工具,在生活中的应用很广泛,目前的大部分手机都自带手电筒App.今天就和大家一起分享该功能的实现原理,下图分别是安卓Vivo4.0与华为7.0测试的效果图(gif最大不能超过5M,这里剪辑了) ...

  9. php完美实现下载远程图片保存到本地(保存微信头像)

    2019独角兽企业重金招聘Python工程师标准>>> /** * php完美实现下载远程图片保存到本地 * @param: 文件url,保存文件目录,保存文件名称,使用的下载方式 ...

最新文章

  1. JavaMail学习笔记(一)、理解邮件传输协议(SMTP、POP3、IMAP、MIME)
  2. Java黑皮书课后题第6章:*6.38(生成随机字符)使用程序清单6-10 RandomCharacter中的方法,打印100个大写字母及100个一位数字,每行打印10个
  3. 解决webpack 打包出现额外的xxxx.LICENSE.js文件
  4. 男人在35岁之前最好的投资
  5. 自从用了Less 编写css,你比以前更快了~
  6. xk01与mk01的区别
  7. ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or
  8. java -jar bat_java jar包和bat批处理命令
  9. 最简单!阿里云服务器采用 LNMP一键安装包 配置 Linux+Nginx+Mysql+PHP
  10. 肝通宵写了三万字把SQL数据库的所有命令,函数,运算符讲得明明白白讲解,内容实在丰富,建议收藏+三连好评!
  11. 关于java中method.invoked 传入类型不一样的问题
  12. AEJoy —— 详解 AE 如何将 png 序列帧导出为 SVGA 动画文件
  13. 鸿蒙系统,鸿蒙app简易登录界面,界面开发教程
  14. u盘中毒(U盘所有的文件都变成快捷方式)的解决方法
  15. YOLO ZOO:YOU ONLY LOOK ONCE ZOO
  16. Logback日志配置和简单使用
  17. keras提取网络中间层输出、中间层特征
  18. IT-linux-top系列--top静态使用
  19. 开题报告:基于java餐厅网站和座位预定系统 毕业设计论文开题报告模板
  20. SyntaxError: E:\IdeaProject\src\main.js: Identifier ‘ElementPlus‘ has already been declared的解决方法

热门文章

  1. m=1,n=2;不符合C语言的赋值语句,矿大 C语言程序设计期末考试试题(含答案)
  2. Python常用内建模块(内含实例)
  3. 构建智能家居的神器HomeAssistant
  4. php绘图和canvas,html5 canvas画图实例用法汇总
  5. alpha-shape_拔剑-浆糊的传说_新浪博客
  6. python集合的元素可以是_python集合入门须知
  7. Fresh Diagnose 8.65-电脑硬件信息查看和硬件性能基准测试
  8. Python集合的并集—union函数
  9. 核密度估计Kernel Density Estimation(KDE)
  10. 在人工智能市场的泡沫下,智能名片的火热还会持续多久?