image
image
1.PHAsset獲取本地圖片的信息:名稱,大小
// 名稱
PHAsset* asset;
NSString *fileName = @"";
if (asset) {
fileName = [asset valueForKey:@"filename"];
}
// 大小
UIImage* image郁油;
NSData* data = UIImageJPEGRepresentation(image, 1);
NSInteger size = [data length];
2.對(duì)于拍照 獲取本地圖片的信息:名稱躯护,大小
#pragma mark - UIImagePickerControllerDelegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
NSLog(@"%@", info);
[picker dismissViewControllerAnimated:YES completion:nil];
// info中就包含了選擇的圖片
UIImage *image = info[UIImagePickerControllerOriginalImage];
self.avatarImageView.image = image;
// 先保存到相冊(cè) 然后獲取 PHAsset
// saveImageToPhotoLibrary - 已經(jīng)寫YMImage分類
self.asset = [image saveImageToPhotoLibrary][0];
}
YMImage分類
/**
保存圖片到本地惊来,并讀取本地圖片信息
相當(dāng)于 - (PHFetchResult<PHAsset *> *)saveImageToPhotoLibrary
*/
- (void)saveImageToPhotoLibraryFinish:(void(^)(PHAsset *asset))finish {
NSMutableArray *imageIds = [NSMutableArray array];
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
//寫入圖片到相冊(cè)
PHAssetChangeRequest *req = [PHAssetChangeRequest creationRequestForAssetFromImage:self];
//記錄本地標(biāo)識(shí),等待完成后取到相冊(cè)中的圖片對(duì)象
[imageIds addObject:req.placeholderForCreatedAsset.localIdentifier];
} completionHandler:^(BOOL success, NSError * _Nullable error) {
if (success) {
//成功后取相冊(cè)中的圖片對(duì)象
PHFetchResult *result = [PHAsset fetchAssetsWithLocalIdentifiers:imageIds options:nil];
if (finish) finish([result firstObject]);
}
}];
}
/**
獲得剛才添加到【相機(jī)膠卷】中的圖片
相當(dāng)于 - (void)saveImageToPhotoLibraryFinish:(void(^)(PHAsset *asset))finish
*/
- (PHFetchResult<PHAsset *> *)saveImageToPhotoLibrary {
__block NSString *createdAssetId = nil;
// 添加圖片到【相機(jī)膠卷】
[[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{
createdAssetId = [PHAssetChangeRequest creationRequestForAssetFromImage:self].placeholderForCreatedAsset.localIdentifier;
} error:nil];
if (createdAssetId == nil) return nil;
// 在保存完畢后取出圖片
return [PHAsset fetchAssetsWithLocalIdentifiers:@[createdAssetId] options:nil];
}
3.選擇視頻
#import <MobileCoreServices/MobileCoreServices.h>
[self openImagePickerController:UIImagePickerControllerSourceTypePhotoLibrary];
- (void)openImagePickerController:(UIImagePickerControllerSourceType)type
{
if (![UIImagePickerController isSourceTypeAvailable:type]) return;
UIImagePickerController *ipc = [[UIImagePickerController alloc] init];
ipc.sourceType = type;
ipc.mediaTypes = [NSArray arrayWithObject:(__bridge NSString*)kUTTypeMovie];
ipc.delegate = self;
[self presentViewController:ipc animated:YES completion:nil];
}
#pragma mark - UIImagePickerControllerDelegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
NSLog(@"%@", info);
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:(__bridge NSString*)kUTTypeMovie]){
if (@available(iOS 11.0, *)) {
PHAsset *asset = info[UIImagePickerControllerPHAsset];
NSString *fileName = @"";
if (asset) {
fileName = [asset valueForKey:@"filename"];
NSLog(@"%@", fileName);
}
} else {
PHFetchResult *result = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeVideo options:nil];
[result enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSString *fileName = [obj valueForKey:@"filename"];
if (fileName.length) {
*stop = YES;
}
NSLog(@"%@", fileName);
}];
}
}
[picker dismissViewControllerAnimated:YES completion:nil];
}
4.拍照后獲取圖片名字 和 圖片路徑
// 保存圖片到相冊(cè)
- (void)saveImageToPhotoLibrary:(UIImage *)image completed:(void(^)( NSString * _Nullable imageURL))completed {
// 1. 獲取當(dāng)前App的相冊(cè)授權(quán)狀態(tài)
PHAuthorizationStatus authorizationStatus = [PHPhotoLibrary authorizationStatus];
// 2. 判斷授權(quán)狀態(tài)
if (authorizationStatus == PHAuthorizationStatusAuthorized) {
__block NSString *createdAssetId = nil;
// 添加圖片到【相機(jī)膠卷】
[[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{
createdAssetId = [PHAssetChangeRequest creationRequestForAssetFromImage:image].placeholderForCreatedAsset.localIdentifier;
} error:nil];
if (createdAssetId == nil) {
!completed ? : completed(nil);
}
// 在保存完畢后取出圖片信息
PHFetchResult * result = [PHAsset fetchAssetsWithLocalIdentifiers:@[createdAssetId] options:nil];
PHAsset *asset = [result firstObject];
[result enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSString *fileName = [obj valueForKey:@"filename"];
NSLog(@"%@", fileName); // 能得到名字 IMG_3301.JPG
}];
[asset requestContentEditingInputWithOptions:nil completionHandler:^(PHContentEditingInput * _Nullable contentEditingInput, NSDictionary * _Nonnull info) {
NSLog(@"URL: %@", contentEditingInput.fullSizeImageURL.absoluteString);
NSString* path = [contentEditingInput.fullSizeImageURL.absoluteString substringFromIndex:7];//screw all the crap of file://
NSLog(@"path: %@", path);
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL isExist = [fileManager fileExistsAtPath:path];
if (isExist) {
NSLog(@"oh yeah");
!completed ? : completed(path);
}
else {
NSLog(@"damn");
!completed ? : completed(nil);
}
}];
}
else if (authorizationStatus == PHAuthorizationStatusNotDetermined) { // 如果沒決定, 彈出指示框, 讓用戶選擇
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
// 如果用戶選擇授權(quán), 則保存圖片
if (status == PHAuthorizationStatusAuthorized) {
[self saveImageToPhotoLibrary:image completed:completed];
}
}];
} else {
NSLog(@"請(qǐng)?jiān)谠O(shè)置界面, 授權(quán)訪問相冊(cè)");
completed(nil);
}
}