美文网首页
使用 ZLPhotoBrowser 相机,调用其编辑功能

使用 ZLPhotoBrowser 相机,调用其编辑功能

作者: CoderGuogt | 来源:发表于2019-12-27 11:39 被阅读0次

ZLPhotoBrowser 介绍

方便易用的相册多选框架,支持预览/相册内拍照及录视频、拖拽/滑动选择,3DTouch预览,编辑裁剪图片/视频,导出视频(可添加水印,粒子特效,视频转码);支持多语言国际化(中文简/繁,英语,日语,可手动切换);在线下载iCloud端图片;支持预览网络及本地图片/视频。

遇到的问题

在使用 ZLPhotoBrowser 的相机功能时,发现拍照完成后,并没有编辑功能,只能采取婉转的方式去实现这样的一个功能。

思路

  1. 拍照完成后,利用Photos框架进行照片保存
  2. 根据保存后的 localIdentifier 获取到相册这张图片的 PHAsset 对象
  3. 调用 ZLPhotoActionSheetpreviewPhotos:index:hideToolBar:complete:方法

ZLPhotoActionSheet 有一个这样的方法进行图片展示

/**
 提供 混合预览照片及视频的方法, 相册PHAsset / 网络、本地图片 / 网络、本地视频,(需先设置 sender 参数)
 
 @warning photos 内对象请调用 ZLDefine 中 GetDictForPreviewPhoto 方法,e.g.: GetDictForPreviewPhoto(image, ZLPreviewPhotoTypeUIImage)
 
 @param photos 接收对象 ZLDefine 中 GetDictForPreviewPhoto 生成的字典
 @param index 点击的照片/视频索引
 @param hideToolBar 是否隐藏底部工具栏和导航右上角选择按钮
 @param complete 回调 (数组内为接收的 PHAsset / UIImage / NSURL 对象)
 */
- (void)previewPhotos:(NSArray<NSDictionary *> *)photos index:(NSInteger)index hideToolBar:(BOOL)hideToolBar complete:(void (^)(NSArray *photos))complete;

实现

  1. 调用 ZLPhotoBrowser 相机功能
ZLCustomCamera *camera = [ZLCustomCamera new];
camera.allowRecordVideo = NO; // 这里不需要视频功能,所以禁止掉了
camera.doneBlock = ^(UIImage *image, NSURL *videoUrl) {
    [self saveImage:image]; // 保存照片
};
[self.owner showDetailViewController:camera sender:self.owner];

self.owner 是一个UIViewController,在这里替换成你自己的控制器即可。

  1. 保存照片到相册
NSError *error = nil;
// 保存图片到相册
__block PHObjectPlaceholder *createAsset = nil;
[[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{
    createAsset = [PHAssetChangeRequest creationRequestForAssetFromImage:image].placeholderForCreatedAsset; // PHAssetCreationRequest 是iOS9 之后才有的
} error:&error];

苹果对 PHObjectPlaceholder 的介绍


PHObjectPlaceholder这个对象,继承于PHObject,有一个 localIdentifier 属性,我们可以通过这个属性获取到相册这张照片的 PHAsset 类型对象。(网上查了资料,发现很多方式都是通过遍历相册,然后取出最后一张照片)

  1. 获取图片的 PHAsset 对象
PHAsset *asset = [PHAsset fetchAssetsWithLocalIdentifiers:@[createAsset.localIdentifier] options:nil].lastObject;
  1. 调用 previewPhotos:index:hideToolBar:complete: 方法
NSArray *array = @[GetDictForPreviewPhoto(asset, ZLPreviewPhotoTypePHAsset)];
[self.actionSheet previewPhotos:array index:0 hideToolBar:NO complete:^(NSArray * _Nonnull photos) {}];

最后委婉的实现了编辑操作。

/**
 * 保存图片,并且跳转编辑
 */
- (void)saveImage:(UIImage *)image {
    
    NSError *error = nil;
    // 保存图片到相册
    __block PHObjectPlaceholder *createAsset = nil;
    [[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{
        createAsset = [PHAssetChangeRequest creationRequestForAssetFromImage:image].placeholderForCreatedAsset; // PHAssetCreationRequest 是iOS9 之后才有的
    } error:&error];
    
    // 保存图片失败
    if (error || createAsset == nil || !createAsset.localIdentifier.length) return;
    
    // 根据 localIdentifier 获取到图片
    PHAsset *asset = [PHAsset fetchAssetsWithLocalIdentifiers:@[createAsset.localIdentifier] options:nil].lastObject;
    NSArray *array = @[GetDictForPreviewPhoto(asset, ZLPreviewPhotoTypePHAsset)];
    [self.actionSheet previewPhotos:array index:0 hideToolBar:NO complete:^(NSArray * _Nonnull photos) {}];
}

ZLPhotoBrowser地址

相关文章

网友评论

      本文标题:使用 ZLPhotoBrowser 相机,调用其编辑功能

      本文链接:https://www.haomeiwen.com/subject/enoroctx.html