swift 将图片保存到本地_swift3.0 保存图片到本地,申请权限
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 保存图片到本地,申请权限相关推荐
- swift 将图片保存到本地_如何保存微博的所有图片链接并下载图片到本地
点击上方 月小水长 并 设为星标,第一时间接收干货推送 这是 月小水长 的第 47 篇原创干货 对于一个爬虫,其爬取的目标不仅限于文字,图片.语音.视频均有可能,我开源的微博爬虫之话题爬虫,设定之初就 ...
- Android系统版本在6.0+以上需要动态申请权限
在Androidmanifest.xml里申请过还不够,还需要在Mainactivity里动态申请.调试时报错有2种,不能创建父目录和连接超时.好用的框架有com.github.dfqin:grant ...
- swift 将图片保存到本地_swift 图片存储到本地文件的搜索结果-阿里云开发者社区...
iOS - UIImageView 前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIImageView : UIView @available(iOS 2.0, ...
- swift 将图片保存到本地_Swift实现截屏并保存相册
func saveToLocal() { //截屏 let screenRect = UIScreen.mainScreen().bounds UIGraphicsBeginImageContext( ...
- swift 将图片保存到本地_Swift - 保存图片到系统相册(相机胶卷),并获取存放路径、缩略图...
(本文代码已升级至Swift3) 有时我们需要把图像(比如:从网络上获取的图片.程序自己生成的图片等)保存到系统相册(照片)中,通常有两种办法:一是使用 UIImageWriteToSavedPhot ...
- python图片保存_Python中读取,显示,保存图片的方法
一 opencv importcv2 as cv#load img =cv.imread(imagepath)#shape=(height, width, channel) h,w,c =img.sh ...
- [高通SDM450][Android9.0]CTA认证--拆分申请权限分组
文章目录 开发平台基本信息 问题描述 解决方法 开发平台基本信息 芯片: SDM450 版本: Android 9.0 kernel: msm-4.9 问题描述 设备在进行入网认证的时候,实验室要求应 ...
- Android开发手电筒(支持6.0以上系统智能申请权限)
手电筒小工具,在生活中的应用很广泛,目前的大部分手机都自带手电筒App.今天就和大家一起分享该功能的实现原理,下图分别是安卓Vivo4.0与华为7.0测试的效果图(gif最大不能超过5M,这里剪辑了) ...
- php完美实现下载远程图片保存到本地(保存微信头像)
2019独角兽企业重金招聘Python工程师标准>>> /** * php完美实现下载远程图片保存到本地 * @param: 文件url,保存文件目录,保存文件名称,使用的下载方式 ...
最新文章
- JavaMail学习笔记(一)、理解邮件传输协议(SMTP、POP3、IMAP、MIME)
- Java黑皮书课后题第6章:*6.38(生成随机字符)使用程序清单6-10 RandomCharacter中的方法,打印100个大写字母及100个一位数字,每行打印10个
- 解决webpack 打包出现额外的xxxx.LICENSE.js文件
- 男人在35岁之前最好的投资
- 自从用了Less 编写css,你比以前更快了~
- xk01与mk01的区别
- ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or
- java -jar bat_java jar包和bat批处理命令
- 最简单!阿里云服务器采用 LNMP一键安装包 配置 Linux+Nginx+Mysql+PHP
- 肝通宵写了三万字把SQL数据库的所有命令,函数,运算符讲得明明白白讲解,内容实在丰富,建议收藏+三连好评!
- 关于java中method.invoked 传入类型不一样的问题
- AEJoy —— 详解 AE 如何将 png 序列帧导出为 SVGA 动画文件
- 鸿蒙系统,鸿蒙app简易登录界面,界面开发教程
- u盘中毒(U盘所有的文件都变成快捷方式)的解决方法
- YOLO ZOO:YOU ONLY LOOK ONCE ZOO
- Logback日志配置和简单使用
- keras提取网络中间层输出、中间层特征
- IT-linux-top系列--top静态使用
- 开题报告:基于java餐厅网站和座位预定系统 毕业设计论文开题报告模板
- SyntaxError: E:\IdeaProject\src\main.js: Identifier ‘ElementPlus‘ has already been declared的解决方法
热门文章
- m=1,n=2;不符合C语言的赋值语句,矿大 C语言程序设计期末考试试题(含答案)
- Python常用内建模块(内含实例)
- 构建智能家居的神器HomeAssistant
- php绘图和canvas,html5 canvas画图实例用法汇总
- alpha-shape_拔剑-浆糊的传说_新浪博客
- python集合的元素可以是_python集合入门须知
- Fresh Diagnose 8.65-电脑硬件信息查看和硬件性能基准测试
- Python集合的并集—union函数
- 核密度估计Kernel Density Estimation(KDE)
- 在人工智能市场的泡沫下,智能名片的火热还会持续多久?