当前位置: 首页 > news >正文

Swift 3 实现拍照功能

编辑.plist文件,添加两个key-value,打开相机和相册的访问权限
1) 申请相机权限:

<key>NSCameraUsageDescription</key>
<string>This app will use camera.</string>

2) 申请相册权限
<key>NSPhotoLibraryUsageDescription</key>
<string>You can select photos to attach to reports.</string>


在xcode中拖一个UIImageview 控件


继承下面两个类

UINavigationControllerDelegate

UIImagePickerControllerDelegate


实现方法:
class yourController:..., UINavigationControllerDelegate, UIImagePickerControllerDelegate  {
...


}

1. 拍照按钮实现:
@IBAction func your_take_photo_action(_ sender: UIButton) {
        imagePicker =  UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.sourceType = .camera
        present(imagePicker, animated: true, completion: nil)
    }






2. 保存相册
@IBAction func save(_ sender: AnyObject) {
        UIImageWriteToSavedPhotosAlbum(imageTake.image!, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil)
    }




3. 实现以下两个开启相机和选中图片的回调函数
func image(_ image: UIImage, didFinishSavingWithError error: Error?, contextInfo: UnsafeRawPointer) {
        if let error = error {
            // we got back an error!
            let ac = UIAlertController(title: "Save error", message: error.localizedDescription, preferredStyle: .alert)
            ac.addAction(UIAlertAction(title: "OK", style: .default))
            present(ac, animated: true)
        } else {
            let ac = UIAlertController(title: "Saved!", message: "Your altered image has been saved to your photos.", preferredStyle: .alert)
            ac.addAction(UIAlertAction(title: "OK", style: .default))
            present(ac, animated: true)
        }
    }


    //MARK: - Done image capture here
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
         imagePicker.dismiss(animated: true, completion: nil)
        imageTake.image = info[UIImagePickerControllerOriginalImage] as? UIImage
    }






最后如果希望转换成base64,可以使用以下函数
func UIImgToBase64(img:UIImage) ->String{
        let imageData:NSData = UIImagePNGRepresentation(img)! as NSData
        let strBase64 = imageData.base64EncodedString(options: .lineLength64Characters)
        return strBase64
    }


相关文章:

  • 我们欠了地球什么?
  • Iphone 消息通知(APNS)的3种方式 -- C# 和 nodejs
  • 创建Azure Function
  • 金旭亮博客之“桌面应用程序开发技术”资源主页
  • Javascript MV framework 对比
  • 基于LWUIT实现全局按键控制(快捷键)
  • azure 架构选择
  • Swift 3 点击屏幕任意位置隐藏键盘
  • 成为优秀的程序员真不简单
  • Swift 保存pdf并在webview显示
  • jQuery:收集一些基于jQuery框架开发的控件/jquery插件。(1)
  • Swift显示alert和promp confirmation
  • Winforms: 为什么Graphics.DpiX/DpiY总是返回96
  • Swift 无操作时自动登出
  • SQL 死锁进程查看与处理
  • [译]CSS 居中(Center)方法大合集
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • ES6语法详解(一)
  • JavaScript 基本功--面试宝典
  • JavaScript服务器推送技术之 WebSocket
  • Javascript设计模式学习之Observer(观察者)模式
  • java概述
  • Less 日常用法
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • PHP面试之三:MySQL数据库
  • vuex 笔记整理
  • 基于HAProxy的高性能缓存服务器nuster
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • #Java第九次作业--输入输出流和文件操作
  • (003)SlickEdit Unity的补全
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (2)MFC+openGL单文档框架glFrame
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (七)c52学习之旅-中断
  • (区间dp) (经典例题) 石子合并
  • (三十五)大数据实战——Superset可视化平台搭建
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (万字长文)Spring的核心知识尽揽其中
  • (转)树状数组
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .NET 8.0 发布到 IIS
  • .NET Project Open Day(2011.11.13)
  • .NetCore项目nginx发布
  • .Net转前端开发-启航篇,如何定制博客园主题
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • @Mapper作用
  • [52PJ] Java面向对象笔记(转自52 1510988116)
  • [C/C++]数据结构----顺序表的实现(增删查改)
  • [C++]AVL树怎么转