Camera拍照、圖片選取、錄像&簡單編輯

Camera  

#import <MobileCoreServices/UTCoreTypes.h>

#import <MobileCoreServices/MobileCoreServices.h>

#import <MediaPlayer/MPMoviePlayerViewController.h>

#import <MediaPlayer/MPMoviePlayerController.h>

#import <MediaPlayer/MPMusicPlayerController.h>

#import <AssetsLibrary/AssetsLibrary.h>

delegate

<UINavigationControllerDelegate,UIImagePickerControllerDelegate ,UIVideoEditorControllerDelegate>


1.Camera 一些狀態判斷

-(void)test{  

    if ([selfisCameravaliable]) {

        NSLog(@"當前相機可用");

    } else {

        

        NSLog(@"當前相機不可用");

    }

    

    

    if ([selfisCamerFlashavaliable]) {

        NSLog(@"當前燈可用");

    } else {

        

        NSLog(@"當前燈不可用");

    }

    

    if ([selfisCamerFlashRearlavaliable]) {

        NSLog(@"當後燈可用");

    } else {

        

        NSLog(@"當後燈不可用");

    }

    

    //前後攝像頭是否可用

    if ([selfisCameraavaliFront]) {

        NSLog(@"當攝像頭可用");

    } else {

        

        NSLog(@"當攝像頭不可用");

    }

    

    if ([selfisCameraavaliRear]) {

        NSLog(@"後攝像頭可用");

    } else {

        

        NSLog(@"後攝像頭不可用");

    }

    

    //當前camera支持的媒體類型 iamge or video

    if ([selfcameraSupportMedaiType:(__bridgeNSString *)kUTTypeImage]) {

        NSLog(@"支持拍照");

    } else {

        NSLog(@"不支持拍照");

    }

    

    if ([selfcameraSupportMedaiType:(__bridgeNSString *)kUTTypeMovie]) {

        NSLog(@"支持錄像");

    } else {

        NSLog(@"不支持錄像");

    }

}


- (BOOL)isCameravaliable{


    return [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];

}


-(BOOL)isCamerFlashavaliable{

    

    return [UIImagePickerControllerisFlashAvailableForCameraDevice:UIImagePickerControllerCameraDeviceFront];

}


-(BOOL)isCamerFlashRearlavaliable{

    

    return [UIImagePickerControllerisFlashAvailableForCameraDevice:UIImagePickerControllerCameraDeviceRear];

}


-(BOOL)isCameraavaliFront{


    return [UIImagePickerControllerisCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront];

}


-(BOOL)isCameraavaliRear{

    return [UIImagePickerControllerisCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear];

}


-(BOOL)cameraSupportMedaiType:(NSString *) paraMediaType{

    

    NSArray *avaiableMedia = [UIImagePickerControlleravailableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];

    

    for (NSString *itemin avaiableMedia) {

        

        if ([itemisEqualToString:paraMediaType]) {

            returntrue;

        }

    }    

    returnfalse;

}

2.Camera 拍照功能

 UIImagePickerController *controller = [[UIImagePickerControlleralloc] init];

    //設置圖片源

    controller.sourceType =UIImagePickerControllerSourceTypeCamera;

    NSString *requireMediaType = (__bridgeNSString *)kUTTypeImage;

    controller.mediaTypes = [NSArrayarrayWithObjects:requireMediaType,nil];

    //圖片是否可以編輯

    controller.allowsEditing =false;

//    controller.cameraDevice

    controller.delegate =self;

    controller.cameraFlashMode =UIImagePickerControllerCameraFlashModeOn;

    [self.navigationControllerpresentViewController:controller animated:YEScompletion:nil];

相冊照片選取功----

-(void)configImagePickerLib{

    UIImagePickerController *controller = [[UIImagePickerControlleralloc] init];

    //設置圖片源

    controller.sourceType =UIImagePickerControllerSourceTypePhotoLibrary;

    NSString *requireMediaType = (__bridgeNSString *)kUTTypeImage;

    controller.mediaTypes = [NSArrayarrayWithObjects:requireMediaType,nil];

    //圖片是否可以編輯

    controller.allowsEditing =false;

    //    controller.cameraDevice

    controller.delegate =self;

    [self.navigationControllerpresentViewController:controller animated:YEScompletion:nil];

}


#delegate

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{

    

    //獲取拍照獲得的圖片

    /*  picture  */

    NSString *mediaType = [infoobjectForKey:UIImagePickerControllerMediaType];

    if ([mediaTypeisEqualToString:(__bridgeNSString*)kUTTypeImage]) {

        

        UIImage *image = [infoobjectForKey:UIImagePickerControllerOriginalImage];

        self.imageVIew.image = image;

        self.imageVIew.contentMode =UIViewContentModeScaleToFill;

        

        //將圖片保存

        SEL saveImage =@selector(imageWasSaveSucessfully:didFinishiDavingWithError: contextInfo:);

        UIImageWriteToSavedPhotosAlbum(image,self, saveImage, nil);

    }

    

//    [picker dismissViewControllerAnimated:YES completion:nil];

}

-(void)imageWasSaveSucessfully:(UIImage *)pareImage didFinishiDavingWithError:(NSError *)pareError contextInfo:(void *)prraInfo{

    

    if (pareError ==nil) {

        NSLog(@"圖片保存成功..");

    } else {

        NSLog(@"圖片保存bu成功..error = %@", pareError);

    }

}


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

    //拍照與錄像取消觸發方法

    [picker dismissViewControllerAnimated:YEScompletion:nil];

}


//        掃描媒體庫將照片庫中第一張圖片顯示到頁面

-(void)choicePic{

    ALAssetsLibrary *assetLibrary = [[ALAssetsLibraryalloc] init];

    //創建一個子線程

    dispatch_queue_t  q =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

    dispatch_async(q, ^{

        

        //        掃描媒體庫將照片庫中第一張圖片顯示到頁面

        [assetLibrary enumerateGroupsWithTypes:ALAssetsGroupAllusingBlock:^(ALAssetsGroup *group,BOOL *stop) {

            //使用block查看遍歷資源

            [group enumerateAssetsUsingBlock:^(ALAsset *result,NSUInteger index, BOOL *stop) {

                //主要業務邏輯

                NSString *assetType = [resultvalueForProperty:ALAssetPropertyType];

                //如果是圖片資源

                if ([assetTypeisEqualToString:ALAssetTypePhoto]) {

                    //是否停止遍歷

                    *stop = false;

                    //返回圖片信息

                    ALAssetRepresentation *asseetRepresentation = [resultdefaultRepresentation];

                    //圖片縮放參數

                    CGFloat imagecale = [asseetRepresentationscale];

                    UIImageOrientation imageOrientation = (UIImageOrientation)[asseetRepresentationorientation];

                    

                    dispatch_async(dispatch_get_main_queue(), ^{

                        

                        CGImageRef imageRef = [asseetRepresentationfullResolutionImage];

                        UIImage *image = [[UIImagealloc] initWithCGImage:imageRefscale:imagecale orientation:imageOrientation];

                        if (image !=nil) {

                            //顯示到界面

                            self.imageVIew.image = image;

                        }

                    });

                }

                

            }];

        } failureBlock:^(NSError *error) {

            NSLog(@"error = %@", error);

        }];

    });

}


Camea錄像功能

#pragma mark ########## 

-(void)configVideoController{

    

    UIImagePickerController *controller = [[UIImagePickerControlleralloc] init];

    NSString *requireMediaType = (__bridgeNSString *)kUTTypeMovie;

    controller.sourceType =UIImagePickerControllerSourceTypeCamera;

    //類型 media movie

    controller.mediaTypes = [NSArrayarrayWithObjects:requireMediaType,nil];

    //

    controller.delegate =self;

    //視屏設置品質

    controller.videoQuality =UIImagePickerControllerQualityTypeHigh;

    controller.videoMaximumDuration =30.0;

    [self.navigationControllerpresentViewController:controller animated:YEScompletion:nil];

}


#Delegate

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{

    /*  vido  */

    //當前多媒體格式

    NSString *type = [info objectForKey:UIImagePickerControllerMediaType];

    __block MPMoviePlayerViewController *movieController;

    

    if ([type isEqualToString:(__bridge NSString *)kUTTypeMovie]) {

        NSDictionary *metadata = [info objectForKey:UIImagePickerControllerMediaMetadata];

        NSURL *urlVideo = [info objectForKey:UIImagePickerControllerMediaURL];

        NSLog(@"urlVideo = %@", urlVideo);

//        movieController  = [[MPMoviePlayerViewController alloc] initWithContentURL:urlVideo];

//        movieController.moviePlayer.scalingMode = MPMovieScalingModeFill;

//        //控制類型

//        movieController.moviePlayer.controlStyle = MPMovieControlStyleEmbedded;

//        [picker dismissViewControllerAnimated:YES completion:^{

//           

//            [self presentMoviePlayerViewControllerAnimated:movieController];

//        }];

        

        ALAssetsLibrary *lib = [[ALAssetsLibrary alloc] init];

        [lib writeVideoAtPathToSavedPhotosAlbum:urlVideo completionBlock:^(NSURL *assetURL, NSError *error) {


            if (error ==nil) {

                NSLog(@"視頻保存成功");

            } else {

                NSLog(@"視頻保存成功"); 

            }

        }];

    }   

}

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

    //拍照與錄像取消觸發方法

    [picker dismissViewControllerAnimated:YEScompletion:nil];

}


  //視頻編輯

    UIImagePickerController *imagePicker = [[UIImagePickerControlleralloc] init];

    imagePicker.sourceType =UIImagePickerControllerSourceTypePhotoLibrary;

    NSString *requireMediaType = (__bridgeNSString *)kUTTypeMovie;

    //類型 media movie

    imagePicker.mediaTypes = [NSArrayarrayWithObjects:requireMediaType,nil];

    //

    imagePicker.delegate =self;

    [self.navigationControllerpresentViewController:imagePickeranimated:YEScompletion:nil];


//info  包含type image/video 附加信息

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{


    NSString *mediaType = [infoobjectForKey:UIImagePickerControllerMediaType];

    

    __blockNSURL *videoUrl = nil;

    if ([mediaTypeisEqualToString:(__bridgeNSString*)kUTTypeMovie]) {

        

        videoUrl = [info objectForKey:UIImagePickerControllerMediaURL];

    }

    

    //處理視頻

    [picker dismissViewControllerAnimated:YEScompletion:^{

    

        if (videoUrl !=nil) {

            

            NSString *videoString = [videoUrlpath];

            if ([UIVideoEditorControllercanEditVideoAtPath:videoString]) {

                UIVideoEditorController *videoEdit = [[UIVideoEditorControlleralloc] init];

                videoEdit.delegate =self;

                videoEdit.videoPath = videoString;

                [self.navigationControllerpresentViewController:videoEdit animated:YEScompletion:^{

                    

                }];

                videoUrl = nil;

                

            }

        } else {

            

            NSLog(@"當前路徑下的資源不可編輯 ...");

        }

    }];

    

}

#pragma mark editdelegate

-(void)videoEditorController:(UIVideoEditorController *)editor didSaveEditedVideoToPath:(NSString *)editedVideoPath{


    NSLog(@"editVideoPath =  %@", editedVideoPath);

    [editor dismissViewControllerAnimated:YEScompletion:nil];

}


-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{

    

    return YES;

}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章