拍照在App中使用频次高,入门级别直接调用系统拍照


  • 思路:

    系统拍照使用UIImagePickerController

    1.设置下plist,否则没权限,报错

    2.判断摄像头,获取权限,否则弹出界面黑着

    3.设置代理,实现代理

    4.代理方法中获取拍照的图片/视频

  • 上菜

    • plist中添加Privacy - Camera Usage Description,文案根据App需要来

    • 权限

    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { 
    
    }
    • 设置UIImagePickerController
    UIImagePickerController *vc = [[UIImagePickerController alloc] init];
    // 设置该属性的时候,出现拍照与拍视频选项
    vc.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
    vc.sourceType = UIImagePickerControllerSourceTypeCamera;
    vc.delegate = self;
    vc.allowsEditing = NO;
    // 设置摄像头[后置摄像头]
    vc.cameraDevice = UIImagePickerControllerCameraDeviceRear;
    // 设置闪光模式
    vc.cameraFlashMode = UIImagePickerControllerCameraFlashModeAuto;
    // 设置摄像头模式
    vc.cameraCaptureMode = UIImagePickerControllerCameraCaptureModeVideo; // 当该模式设置为video的时候,meidaTypes设置出现拍照与拍视频选项时,先展示video视频拍摄选项
    // 录制的最大时间
    vc.videoMaximumDuration = 10;
    // 视频质量
    vc.videoQuality = UIImagePickerControllerQualityTypeHigh;
    vc.modalPresentationStyle = UIModalPresentationFullScreen;
    [[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewController:vc
    animated:YES
    completion:nil];
    • 代理实现
    #pragma mark - UINavigationControllerDelegate, UIImagePickerControllerDelegate
    - (void)imagePickerController:(UIImagePickerController *)picker
    didFinishPickingMediaWithInfo:(NSDictionary<UIImagePickerControllerInfoKey,id> *)info {
    // 获取选中资源类型
    NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
    if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) { // 拍照结果
    UIImage *image = nil;
    if (picker.allowsEditing) {
    image = [info objectForKey:UIImagePickerControllerEditedImage];
    } else {
    image = [info objectForKey:UIImagePickerControllerOriginalImage];
    }
    [picker dismissViewControllerAnimated:YES completion:nil];
    } else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie]) { // 视频结果
    NSURL *url = [info objectForKey:UIImagePickerControllerMediaURL];
    // 视频存放到系统相册
    [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
    if (status == PHAuthorizationStatusAuthorized) {
    [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
    [PHAssetChangeRequest creationRequestForAssetFromVideoAtFileURL:url];
    } completionHandler:^(BOOL success, NSError * error) {
    if (success) {
    NSLog(@"保存视频到相册");
    } else {
    NSLog(@"保存视频到相册失败:%@", error);
    }
    }];
    } else {
    NSLog(@"无访问相册权限");
    }
    dispatch_async(dispatch_get_main_queue(), ^{
    [picker dismissViewControllerAnimated:YES completion:nil];
    });
    }];
    }
    } - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
    [picker dismissViewControllerAnimated:YES completion:nil];
    }
  • 结语:

    UIImagePickerController使用方便,可拍照、视频。适用于拍照界面无定制、简单取图这类需求

iOS拍照之系统拍照的更多相关文章

  1. ios手机竖屏拍照图片旋转90°问题解决方法

    手机拍照会给图片添加一个Orientaion信息(即拍照方向),如下: 用ios手机拍照,系统会给图片加上一个方向的属性, ios相机默认的拍照方向是后摄Home键在右为正,前摄Home键在左为正. ...

  2. HTML5: 实现调用系统拍照或者选择照片并预览

    ylbtech-HTML5: 实现调用系统拍照或者选择照片并预览 1.返回顶部 1. <!DOCTYPE html> <html> <head> <meta ...

  3. Android系统拍照源码

    个人对于Android系统拍照的一些总结:一种自定义图片拍照路径 ,另一种直接利用Android拍照后经过处理的缩略图 特别注意第一种方式需要增加SDK读写权限: <uses-permissio ...

  4. 文件件监听器,android系统拍照功能调用后删除系统生成的照片

    先说说要实现的功能: android调用系统拍照功能实时 预览 删除 上传 保存 (用户不能再本地文件夹中看到拍的照片) 再说说遇到的问题: 1.调用系统拍照在系统自带的拍照文件夹中生成一张随机命名图 ...

  5. 摄像头(3)调用系统拍照activity来拍照

    import android.app.Activity; import android.content.Intent; import android.content.pm.PackageManager ...

  6. 摄像头(2)调用系统拍照activity来录像

    import android.app.Activity; import android.content.Intent; import android.content.pm.PackageManager ...

  7. 拍照-----------android系统 至关重要的功能

    一 在Android 中,拍照对应的Action 是android.provider.MediaStore.ACTION_IMAGE_CAPTURE. 用于拍照的Activity 需要返回照片图像数据 ...

  8. Java乔晓松-android中调用系统拍照功能并显示拍照的图片

    android中调用系统拍照功能并显示拍照的图片 如果你是拍照完,利用onActivityResult获取data数据,把data数据转换成Bitmap数据,这样获取到的图片,是拍照的照片的缩略图 代 ...

  9. Android调用系统拍照裁剪和选图功能

    最近项目中用到修改用户头像的功能,基本上都是模板代码,现在简单记录一下. 调用系统拍照 private fun openCamera() { //调用相机拍照 // 创建File对象,用于存储拍照后的 ...

随机推荐

  1. python函数的实例,书写一个创建有针对性的专用密码字典的程序

    python学习,实战学习,函数的学习与使用,综合知识的运用.包括for ,while循环,if...else.. 和if... elif ... else 的条件判断! 问题描述:书写一个创建有针对 ...

  2. php小程序-文章发布系统(mvc框架)

    php小程序-文章发布系统(mvc框架) 一 项目视图 二 项目经验 通过对mvc微型框架的实现,对mvc理论加深,有利于以后框架的学习 三 项目源码 http://files.cnblogs.com ...

  3. Redis 实战 —— 13. 扩展 Redis

    简介 当数据量增大或者读写请求增多后,一台 Redis 服务器可能没办法再存储所有数据或者处理所有读写请求,那么就需要对 Redis 进行扩展,保证 Redis 在能存储所有数据对情况下,同时能正常处 ...

  4. 从云数据迁移服务看MySQL大表抽取模式

    摘要:MySQL JDBC抽取到底应该采用什么样的方式,且听小编给你娓娓道来. 小编最近在云上的一个迁移项目中被MySQL抽取模式折磨的很惨.一开始爆内存被客户怼,再后来迁移效率低下再被怼.MySQL ...

  5. HBase原理 – 分布式系统中snapshot是怎么玩的?(转载)

    snapshot(快照)基础原理 snapshot是很多存储系统和数据库系统都支持的功能.一个snapshot是一个全部文件系统.或者某个目录在某一时刻的镜像.实现数据文件镜像最简单粗暴的方式是加锁拷 ...

  6. POJ-2411 Mondriann's Dream (状压DP)

    求把\(N*M(1\le N,M \le 11)\) 的棋盘分割成若干个\(1\times 2\) 的长方形,有多少种方案.例如当 \(N=2,M=4\)时,共有5种方案.当\(N=2,M=3\)时, ...

  7. Educational Codeforces Round 67 E.Tree Painting (树形dp)

    题目链接 题意:给你一棵无根树,每次你可以选择一个点从白点变成黑点(除第一个点外别的点都要和黑点相邻),变成黑点后可以获得一个权值(白点组成连通块的大小) 问怎么使权值最大 思路:首先,一但根确定了, ...

  8. HDU5739 Fantasia【点双连通分量 割点】

    HDU5739 Fantasia 题意: 给出一张\(N\)个点的无向图\(G\),每个点都有权值\(w_i\),要求计算\(\sum_{i=1}^{N}i\cdot G_i % 1e9+7\) 其中 ...

  9. hdu4352 XHXJ's LIS (数位dp)

    Problem Description #define xhxj (Xin Hang senior sister(学姐))  If you do not know xhxj, then careful ...

  10. hdu5247 找连续数

    Problem Description 小度熊拿到了一个无序的数组,对于这个数组,小度熊想知道是否能找到一个k 的区间,里面的 k 个数字排完序后是连续的. 现在小度熊增加题目难度,他不想知道是否有这 ...