Skip to content

Commit 3357eab

Browse files
author
yuzheng
committed
feat: save metadata to Album,adapt iOS13
1 parent b8c71c8 commit 3357eab

4 files changed

Lines changed: 46 additions & 3 deletions

File tree

TZImagePickerController/TZImagePickerController/TZImageManager.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
/// Save photo 保存照片
8181
- (void)savePhotoWithImage:(UIImage *)image completion:(void (^)(PHAsset *asset, NSError *error))completion;
8282
- (void)savePhotoWithImage:(UIImage *)image location:(CLLocation *)location completion:(void (^)(PHAsset *asset, NSError *error))completion;
83+
- (void)savePhotoWithImage:(UIImage *)image meta:(NSDictionary *)meta location:(CLLocation *)location completion:(void (^)(PHAsset *asset, NSError *error))completion;
8384

8485
/// Save video 保存视频
8586
- (void)saveVideoWithUrl:(NSURL *)url completion:(void (^)(PHAsset *asset, NSError *error))completion;

TZImagePickerController/TZImagePickerController/TZImageManager.m

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#import "TZImageManager.h"
1010
#import "TZAssetModel.h"
1111
#import "TZImagePickerController.h"
12+
#import <CoreServices/CoreServices.h>
1213

1314
@interface TZImageManager ()
1415
#pragma clang diagnostic push
@@ -497,6 +498,43 @@ - (void)savePhotoWithImage:(UIImage *)image location:(CLLocation *)location comp
497498
}];
498499
}
499500

501+
- (void)savePhotoWithImage:(UIImage *)image meta:(NSDictionary *)meta location:(CLLocation *)location completion:(void (^)(PHAsset *asset, NSError *error))completion {
502+
NSData *imageData = UIImageJPEGRepresentation(image, 1.0f);
503+
CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)imageData, NULL);
504+
NSDateFormatter *formater = [[NSDateFormatter alloc] init];
505+
[formater setDateFormat:@"yyyy-MM-dd-HH:mm:ss-SSS"];
506+
NSString *path = [NSTemporaryDirectory() stringByAppendingFormat:@"image-%@.jpg", [formater stringFromDate:[NSDate date]]];
507+
NSURL *tmpURL = [NSURL fileURLWithPath:path];
508+
CGImageDestinationRef destination = CGImageDestinationCreateWithURL((__bridge CFURLRef)tmpURL, kUTTypeJPEG, 1, NULL);
509+
CGImageDestinationAddImageFromSource(destination, source, 0, (__bridge CFDictionaryRef)meta);
510+
CGImageDestinationFinalize(destination);
511+
CFRelease(source);
512+
CFRelease(destination);
513+
514+
__block NSString *localIdentifier = nil;
515+
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
516+
PHAssetChangeRequest *request = [PHAssetChangeRequest creationRequestForAssetFromImageAtFileURL:tmpURL];
517+
localIdentifier = request.placeholderForCreatedAsset.localIdentifier;
518+
if (location) {
519+
request.location = location;
520+
}
521+
request.creationDate = [NSDate date];
522+
} completionHandler:^(BOOL success, NSError *error) {
523+
[[NSFileManager defaultManager] removeItemAtPath:path error:nil];
524+
dispatch_async(dispatch_get_main_queue(), ^{
525+
if (success && completion) {
526+
PHAsset *asset = [[PHAsset fetchAssetsWithLocalIdentifiers:@[localIdentifier] options:nil] firstObject];
527+
completion(asset, nil);
528+
} else if (error) {
529+
NSLog(@"保存照片出错:%@",error.localizedDescription);
530+
if (completion) {
531+
completion(nil, error);
532+
}
533+
}
534+
});
535+
}];
536+
}
537+
500538
#pragma mark - Save video
501539

502540
- (void)saveVideoWithUrl:(NSURL *)url completion:(void (^)(PHAsset *asset, NSError *error))completion {

TZImagePickerController/TZImagePickerController/TZPhotoPickerController.m

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -811,8 +811,9 @@ - (void)imagePickerController:(UIImagePickerController*)picker didFinishPickingM
811811
TZImagePickerController *imagePickerVc = (TZImagePickerController *)self.navigationController;
812812
[imagePickerVc showProgressHUD];
813813
UIImage *photo = [info objectForKey:UIImagePickerControllerOriginalImage];
814+
NSDictionary *meta = [info objectForKey:UIImagePickerControllerMediaMetadata];
814815
if (photo) {
815-
[[TZImageManager manager] savePhotoWithImage:photo location:self.location completion:^(PHAsset *asset, NSError *error){
816+
[[TZImageManager manager] savePhotoWithImage:photo meta:meta location:self.location completion:^(PHAsset *asset, NSError *error){
816817
if (!error) {
817818
[self addPHAsset:asset];
818819
}

TZImagePickerController/ViewController.m

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,11 +201,13 @@ - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPa
201201
TZGifPhotoPreviewController *vc = [[TZGifPhotoPreviewController alloc] init];
202202
TZAssetModel *model = [TZAssetModel modelWithAsset:asset type:TZAssetModelMediaTypePhotoGif timeLength:@""];
203203
vc.model = model;
204+
vc.modalPresentationStyle = UIModalPresentationFullScreen;
204205
[self presentViewController:vc animated:YES completion:nil];
205206
} else if (isVideo && !self.allowPickingMuitlpleVideoSwitch.isOn) { // perview video / 预览视频
206207
TZVideoPlayerController *vc = [[TZVideoPlayerController alloc] init];
207208
TZAssetModel *model = [TZAssetModel modelWithAsset:asset type:TZAssetModelMediaTypeVideo timeLength:@""];
208209
vc.model = model;
210+
vc.modalPresentationStyle = UIModalPresentationFullScreen;
209211
[self presentViewController:vc animated:YES completion:nil];
210212
} else { // preview photos / 预览照片
211213
TZImagePickerController *imagePickerVc = [[TZImagePickerController alloc] initWithSelectedAssets:_selectedAssets selectedPhotos:_selectedPhotos index:indexPath.item];
@@ -215,6 +217,7 @@ - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPa
215217
imagePickerVc.allowPickingMultipleVideo = self.allowPickingMuitlpleVideoSwitch.isOn;
216218
imagePickerVc.showSelectedIndex = self.showSelectedIndexSwitch.isOn;
217219
imagePickerVc.isSelectOriginalPhoto = _isSelectOriginalPhoto;
220+
imagePickerVc.modalPresentationStyle = UIModalPresentationFullScreen;
218221
[imagePickerVc setDidFinishPickingPhotosHandle:^(NSArray<UIImage *> *photos, NSArray *assets, BOOL isSelectOriginalPhoto) {
219222
self->_selectedPhotos = [NSMutableArray arrayWithArray:photos];
220223
self->_selectedAssets = [NSMutableArray arrayWithArray:assets];
@@ -468,9 +471,9 @@ - (void)imagePickerController:(UIImagePickerController*)picker didFinishPickingM
468471
[tzImagePickerVc showProgressHUD];
469472
if ([type isEqualToString:@"public.image"]) {
470473
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
471-
474+
NSDictionary *meta = [info objectForKey:UIImagePickerControllerMediaMetadata];
472475
// save photo and get asset / 保存图片,获取到asset
473-
[[TZImageManager manager] savePhotoWithImage:image location:self.location completion:^(PHAsset *asset, NSError *error){
476+
[[TZImageManager manager] savePhotoWithImage:image meta:meta location:self.location completion:^(PHAsset *asset, NSError *error){
474477
[tzImagePickerVc hideProgressHUD];
475478
if (error) {
476479
NSLog(@"图片保存失败 %@",error);

0 commit comments

Comments
 (0)