+ (void)getSelectedListResultModel:(NSArray<HXPhotoModel *> *)selectedList complete:(void (^)(NSArray<HXPhotoResultModel *> *, NSArray<HXPhotoResultModel *> *, NSArray<HXPhotoResultModel *> *))complete {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSMutableArray *models = [NSMutableArray array];
NSMutableArray *photos = [NSMutableArray array];
NSMutableArray *videos = [NSMutableArray array];
for (HXPhotoModel *photoModel in selectedList) {
HXPhotoResultModel *resultModel = [[HXPhotoResultModel alloc] init];
resultModel.index = photoModel.endCollectionIndex; // 定位的崩溃位置在这里
if (photoModel.asset) {
if (photoModel.subType == HXPhotoModelMediaSubTypeVideo) {
if ([photoModel.avAsset isKindOfClass:[AVURLAsset class]]) {
AVURLAsset *urlAsset = (AVURLAsset *)photoModel.avAsset;
resultModel.videoURL = urlAsset.URL;
}
resultModel.type = HXPhotoResultModelMediaTypeVideo;
resultModel.videoIndex = photoModel.videoIndex;
}else {
resultModel.photoIndex = photoModel.endIndex;
resultModel.type = HXPhotoResultModelMediaTypePhoto;
}
resultModel.avAsset = photoModel.avAsset;
PHContentEditingInputRequestOptions *options = [[PHContentEditingInputRequestOptions alloc] init];
options.networkAccessAllowed = NO;
__weak typeof(self) weakSelf = self;
[photoModel.asset requestContentEditingInputWithOptions:options completionHandler:^(PHContentEditingInput * _Nullable contentEditingInput, NSDictionary * _Nonnull info) {
BOOL error = [info objectForKey:PHContentEditingInputErrorKey];
// BOOL cloud = [[info objectForKey:PHContentEditingInputResultIsInCloudKey] boolValue];
BOOL cancel = [[info objectForKey:PHContentEditingInputCancelledKey] boolValue];
if (!error && !cancel && contentEditingInput) {
resultModel.fullSizeImageURL = contentEditingInput.fullSizeImageURL;
if (resultModel.type == HXPhotoResultModelMediaTypePhoto) {
resultModel.displaySizeImage = contentEditingInput.displaySizeImage;
}else {
resultModel.displaySizeImage = photoModel.thumbPhoto;
}
resultModel.fullSizeImageOrientation = contentEditingInput.fullSizeImageOrientation;
resultModel.creationDate = contentEditingInput.creationDate;
resultModel.location = contentEditingInput.location;
if ([contentEditingInput.avAsset isKindOfClass:[AVURLAsset class]]) {
AVURLAsset *urlAsset = (AVURLAsset *)contentEditingInput.avAsset;
resultModel.videoURL = urlAsset.URL;
resultModel.avAsset = contentEditingInput.avAsset;
}
[weakSelf sortResultModel:resultModel total:selectedList.count models:models photos:photos videos:videos completion:^(NSArray *all, NSArray *photos, NSArray *videos) {
dispatch_async(dispatch_get_main_queue(), ^{
if (complete) {
complete(all,photos,videos);
}
});
}];
}
}];
}else {
resultModel.creationDate = [NSDate date];
resultModel.displaySizeImage = photoModel.previewPhoto;
if (photoModel.subType == HXPhotoModelMediaSubTypePhoto) {
resultModel.photoIndex = photoModel.endIndex;
resultModel.type = HXPhotoResultModelMediaTypePhoto;
resultModel.fullSizeImageOrientation = photoModel.previewPhoto.imageOrientation;
NSData *imageData;
NSString *suffix;
if (UIImagePNGRepresentation(photoModel.previewPhoto)) {
//返回为png图像。
imageData = UIImagePNGRepresentation(photoModel.previewPhoto);
suffix = @"png";
}else {
//返回为JPEG图像。
imageData = UIImageJPEGRepresentation(photoModel.previewPhoto, 1.0);
suffix = @"jpeg";
}
NSString *fileName = [[self uploadFileName] stringByAppendingString:[NSString stringWithFormat:@".%@",suffix]];
NSString *fullPathToFile = [NSTemporaryDirectory() stringByAppendingPathComponent:fileName];
[imageData writeToFile:fullPathToFile atomically:YES];
resultModel.fullSizeImageURL = [NSURL fileURLWithPath:fullPathToFile];
}else {
resultModel.videoIndex = photoModel.videoIndex;
resultModel.type = HXPhotoResultModelMediaTypeVideo;
resultModel.videoURL = photoModel.videoURL;
}
[self sortResultModel:resultModel total:selectedList.count models:models photos:photos videos:videos completion:^(NSArray *all, NSArray *photos, NSArray *videos) {
dispatch_async(dispatch_get_main_queue(), ^{
if (complete) {
complete(all,photos,videos);
}
});
}];
}
}
});
}