Camera拍照、图片选取、录像&简单编辑

本文详细介绍如何在iOS应用中实现相机拍照、录像及相册选取图片的功能,并提供了完整的代码示例,包括状态判断、图片和视频的保存等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值