使用最新的iOS9 开始推荐使用的<Photos/Photos.h>这个框架实现保存图片或者视频
来源:互联网 发布:traceroute windows 编辑:程序博客网 时间:2024/06/02 19:29
获得自定义的所有相簿
// 获得所有的自定义相簿PHFetchResult<PHAssetCollection *> *assetCollections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];// 遍历所有的自定义相簿for (PHAssetCollection *assetCollection in assetCollections) {}
获得相机胶卷相簿
// 获得相机胶卷PHAssetCollection *cameraRoll = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeSmartAlbumUserLibrary options:nil].lastObject;
获得某个相簿的缩略图
PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init]; // 同步获得图片, 只会返回1张图片 options.synchronous = YES;// 获得某个相簿中的所有PHAsset对象PHFetchResult<PHAsset *> *assets = [PHAsset fetchAssetsInAssetCollection:assetCollection options:nil];for (PHAsset *asset in assets) {CGSize size = CGSizeZero;// 从asset中获得图片[[PHImageManager defaultManager] requestImageForAsset:asset targetSize:size contentMode:PHImageContentModeDefault options:options resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) { NSLog(@"%@", result);}];}
获得某个相簿的原图
PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];// 同步获得图片, 只会返回1张图片options.synchronous = YES;// 获得某个相簿中的所有PHAsset对象PHFetchResult<PHAsset *> *assets = [PHAsset fetchAssetsInAssetCollection:assetCollection options:nil]; for (PHAsset *asset in assets) {CGSize size = CGSizeMake(asset.pixelWidth, asset.pixelHeight);// 从asset中获得图片[[PHImageManager defaultManager] requestImageForAsset:asset targetSize:size contentMode:PHImageContentModeDefault options:options resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) { NSLog(@"%@", result);}];}
利用UIImagePickerController挑选图片
// UIImagePickerController : 可以从系统自带的App(照片\相机)中获得图片// 判断相册是否可以打开if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) return;UIImagePickerController *ipc = [[UIImagePickerController alloc] init];// 打开照片应用(显示所有相簿)ipc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;// 打开照片应用(只显示"时刻"这个相簿)// ipc.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;// 照相机// ipc.sourceType = UIImagePickerControllerSourceTypeCamera;ipc.delegate = self;[self presentViewController:ipc animated:YES completion:nil];#pragma mark - <UIImagePickerControllerDelegate> - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{// 销毁控制器[picker dismissViewControllerAnimated:YES completion:nil];// 设置图片self.imageView.image = info[UIImagePickerControllerOriginalImage];}
NaN错误
- 错误起因:0被当做除数, 比如 10 / 0
最简单的方法保存图片到相机胶卷
UIImageWriteToSavedPhotosAlbum(self.imageView.image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); /** * 通过UIImageWriteToSavedPhotosAlbum函数写入图片完毕后就会调用这个方法 * * @param image 写入的图片 * @param error 错误信息 * @param contextInfo UIImageWriteToSavedPhotosAlbum函数的最后一个参数 */ - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {if (error) { [SVProgressHUD showErrorWithStatus:@"图片保存失败!"];} else { [SVProgressHUD showSuccessWithStatus:@"图片保存成功!"];}}
保存图片到自定义相册
- (IBAction)save {/* PHAuthorizationStatusNotDetermined, 用户还没有做出选择 PHAuthorizationStatusDenied, 用户拒绝当前应用访问相册(用户当初点击了"不允许") PHAuthorizationStatusAuthorized 用户允许当前应用访问相册(用户当初点击了"好") PHAuthorizationStatusRestricted, 因为家长控制, 导致应用无法方法相册(跟用户的选择没有关系) */// 判断授权状态PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];if (status == PHAuthorizationStatusRestricted) { // 因为家长控制, 导致应用无法方法相册(跟用户的选择没有关系) [SVProgressHUD showErrorWithStatus:@"因为系统原因, 无法访问相册"];} else if (status == PHAuthorizationStatusDenied) { // 用户拒绝当前应用访问相册(用户当初点击了"不允许") NSLog(@"提醒用户去[设置-隐私-照片-xxx]打开访问开关");} else if (status == PHAuthorizationStatusAuthorized) { // 用户允许当前应用访问相册(用户当初点击了"好") [self saveImage];} else if (status == PHAuthorizationStatusNotDetermined) { // 用户还没有做出选择 // 弹框请求用户授权 [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) { if (status == PHAuthorizationStatusAuthorized) { // 用户点击了好 [self saveImage]; } }];} } // 保存图片 - (void)saveImage{// PHAsset : 一个资源, 比如一张图片\一段视频// PHAssetCollection : 一个相簿// PHAsset的标识, 利用这个标识可以找到对应的PHAsset对象(图片对象)__block NSString *assetLocalIdentifier = nil;// 如果想对"相册"进行修改(增删改), 那么修改代码必须放在[PHPhotoLibrary sharedPhotoLibrary]的performChanges方法的block中[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ // 1.保存图片A到"相机胶卷"中 // 创建图片的请求 assetLocalIdentifier = [PHAssetCreationRequest creationRequestForAssetFromImage:self.imageView.image].placeholderForCreatedAsset.localIdentifier;} completionHandler:^(BOOL success, NSError * _Nullable error) { if (success == NO) { [self showError:@"保存图片失败!"]; return; } // 2.获得相簿 PHAssetCollection *createdAssetCollection = [self createdAssetCollection]; if (createdAssetCollection == nil) { [self showError:@"创建相簿失败!"]; return; } [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ // 3.添加"相机胶卷"中的图片A到"相簿"D中 // 获得图片 PHAsset *asset = [PHAsset fetchAssetsWithLocalIdentifiers:@[assetLocalIdentifier] options:nil].lastObject; // 添加图片到相簿中的请求 PHAssetCollectionChangeRequest *request = [PHAssetCollectionChangeRequest changeRequestForAssetCollection:createdAssetCollection]; // 添加图片到相簿 [request addAssets:@[asset]]; } completionHandler:^(BOOL success, NSError * _Nullable error) { if (success == NO) { [self showError:@"保存图片失败!"];; } else { [self showSuccess:@"保存图片成功!"];; } }];}];}/** * 获得相簿 */ - (PHAssetCollection *)createdAssetCollection{// 从已存在相簿中查找这个应用对应的相簿PHFetchResult<PHAssetCollection *> *assetCollections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];for (PHAssetCollection *assetCollection in assetCollections) { if ([assetCollection.localizedTitle isEqualToString:XMGAssetCollectionTitle]) { return assetCollection; }}// 没有找到对应的相簿, 得创建新的相簿// 错误信息NSError *error = nil;// PHAssetCollection的标识, 利用这个标识可以找到对应的PHAssetCollection对象(相簿对象)__block NSString *assetCollectionLocalIdentifier = nil;[[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{ // 创建相簿的请求 assetCollectionLocalIdentifier = [PHAssetCollectionChangeRequest creationRequestForAssetCollectionWithTitle:XMGAssetCollectionTitle].placeholderForCreatedAssetCollection.localIdentifier;} error:&error];// 如果有错误信息if (error) return nil;// 获得刚才创建的相簿return [PHAssetCollection fetchAssetCollectionsWithLocalIdentifiers:@[assetCollectionLocalIdentifier] options:nil].lastObject;}- (void)showSuccess:(NSString *)text{dispatch_async(dispatch_get_main_queue(), ^{ [SVProgressHUD showSuccessWithStatus:text];});}- (void)showError:(NSString *)text{dispatch_async(dispatch_get_main_queue(), ^{ [SVProgressHUD showErrorWithStatus:text];});}
Xcode插件的安装路径
/Users/用户名/Library/Application Support/Developer/Shared/Xcode/Plug-ins
0 0
- 使用最新的iOS9 开始推荐使用的<Photos/Photos.h>这个框架实现保存图片或者视频
- 使用Photos保存图片到自定义相册
- iOS:<Photos/Photos.h>获取相册视频以及图片
- Swift4.0--Photos框架的使用附从相簿中获取图片
- iOS Photos.framework 使用
- iOS之相册新框架<Photos/Photos.h>
- <Photos/Photos.h>框架下面获取手机相册
- iOS之相册新框架<Photos/Photos.h>
- iOS8.0 使用Photos.framework对相册的常用操作
- iOS AssetsLibrary和Photos的使用总结(2): 原图获取
- 使用Photos.framework对相册的常用操作
- photos
- 使用Photos来获取相册中所有图片
- iOS:基于Photos框架的图片选择器以及创建自定义相册
- 关于layer.photos图片点击无法弹出的问题分析。
- 关于layer.photos图片点击无法弹出的问题分析
- H - Mysterious Photos
- iOS AssetsLibrary和Photos的使用总结(1): 权限及相册的获取
- EL表达式
- Android中为什么主线程不会因为Looper.loop()方法造成阻塞
- 简单集成融云(一)
- 深入分析Struts2工作流程
- Java Classloader机制解析
- 使用最新的iOS9 开始推荐使用的<Photos/Photos.h>这个框架实现保存图片或者视频
- 在web.xml中配置文件路径classpath
- 活动安排问题-2 (51nod)
- ffmpeg读取H264,截取BMP
- LoadRunner检查点函数web_reg_find和web_find
- 关于微信聊天界面更换背景
- gdb多线程下禁止线程切换
- 文件结构体struct file(Linux 2.6.23内核) (转)
- 矩阵折叠