Taking Photos with the Camera(拍照)

1。導入庫,實現協議

   #import <MobileCoreServices/MobileCoreServices.h>

   <UIImagePickerControllerDelegate, UINavigationControllerDelegate>


e.g.

- (BOOL) cameraSupportsMedia:(NSString *)paramMediaType sourceType:(UIImagePickerControllerSourceType)paramSourceType{

    __block BOOL result = NO;   

    if ([paramMediaType length] == 0){

        NSLog(@"Media type is empty.");

        return NO;

    }  

    //獲取本機中符合指定資源的所有媒體類型,以便後續判定是否支持

    NSArray *availableMediaTypes =  [UIImagePickerController  availableMediaTypesForSourceType:paramSourceType];   

    [availableMediaTypes  enumerateObjectsUsingBlock:

         ^(id obj, NSUInteger idx, BOOL *stop) {       

         NSString *mediaType = (NSString *)obj;

         if ([mediaType isEqualToString:paramMediaType]){

             result = YES;

             *stop= YES;

         }        

     }];    

    return result;    

}

//攝像頭是否支持拍照 

- (BOOL) doesCameraSupportTakingPhotos{  

    //KUTTypeImage : 靜態圖片  

    return [self cameraSupportsMedia:(__bridge NSString *)kUTTypeImage  sourceType:UIImagePickerControllerSourceTypeCamera];    

}

//是否可用攝像頭

- (BOOL) isCameraAvailable{    

    return[UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera];   

}

//delegate:完成選擇,注意這裏的視頻數據或是相片數據並未被保存(到機子的相冊中)

- (void)  imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {  

    NSLog(@"Picker returned successfully.");  

    NSLog(@"infoOfPickedMedia:%@", info); //info:包含了挑選的媒體信息   

    NSString  *mediaType = info[UIImagePickerControllerMediaType];   

    if ([mediaType isEqualToString:(__bridge NSString *)kUTTypeMovie]){ //挑選的是視頻 

        NSURL *urlOfVideo = info[UIImagePickerControllerMediaURL];

        NSLog(@"Video URL = %@", urlOfVideo);

    } 

    else if ([mediaType isEqualToString:(__bridge NSString *)kUTTypeImage]){ //挑選的是相片       

        NSDictionary *metadata = info[UIImagePickerControllerMediaMetadata]; //metadata只針對images

        UIImage *theImage = info[UIImagePickerControllerOriginalImage];        

        NSLog(@"Image Metadata = %@", metadata);

        NSLog(@"Image = %@", theImage);       

    }   

   [picker dismissViewControllerAnimated:YES completion:nil];  

}

//delegate 取消選擇

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{

    NSLog(@"Picker was cancelled");

    [picker dismissViewControllerAnimated:YES completion:nil];   

}

- (void)actionDisplayPickerController {

    if ([self isCameraAvailable] && [self doesCameraSupportTakingPhotos]){

        UIImagePickerController *controller =  [[UIImagePickerController alloc] init];      

        controller.sourceType = UIImagePickerControllerSourceTypeCamera; //從照相機獲取資源,如拍照,攝像等   


        //mediaType:KUTTypeImage / KUTTypeMovie 這裏決定了出現的模式窗口imagePickerController是進行攝像還是進行照相

        NSString *requiredMediaType = (__bridge NSString *)kUTTypeImage; 

        controller.mediaTypes = [[NSArray alloc] initWithObjects:requiredMediaType, nil];        

        controller.allowsEditing = YES;

        controller.delegate = self;       

       [self presentViewController:controller animated:YES completion:nil];       

    } else {

        NSLog(@"Camera is not available.");

    }   

}

postscript:

    didFinishPickingMediaWithInfo中的字典集info包含了所獲取資源的各項屬性(以下是可訪問的key)

    對於images(KUTTypeImage):默認獲取到的相片不會被保存

       UIImagePickerControllerMediaMetadata:元數據(NSDictionary)

       UIImagePickerControllerOriginalImage:獲取到的未編輯的原始圖

       UIImagePickerControllerCropRect:被裁剪的尺寸(若可修改的話 allowsEditing = YES)

       UIImagePickerControllerEditedImage:編輯後的圖

    對於videos(KUTTypeMovie):

       UIImagePickerControllerMediaURL:獲取到video的URL



發佈了15 篇原創文章 · 獲贊 0 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章