首先需要在Info.plist文件中添加两个键值对


然后利用系统类UIImagePickerController调用相机相册,下面已经封装好了类,继承该类调用showImagePickerController()方法就会自动调用相机相册
github地址https://github.com/ColdChains/LAXImagePickerController

import UIKitclass LAXImagePickerController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {var imagePickerController = UIImagePickerController()var didFinishPickingBlock: ((_ image: UIImage?) -> Void)?var imageSize = CGSize.init(width: 100, height: 100)var imageName = "image.png"override func viewDidLoad() {super.viewDidLoad()imagePickerController.modalTransitionStyle = .flipHorizontalimagePickerController.allowsEditing = true}func showCamera() {//UIImagePickerController.isCameraDeviceAvailable(UIImagePickerControllerCameraDevice.Front)if UIImagePickerController.isSourceTypeAvailable(.camera) {imagePickerController.sourceType = .cameraself.show(imagePickerController, sender: nil)} else {let alert = UIAlertController.init(title: "提示", message: "没有检测到摄像头", preferredStyle: .alert)let cancel = UIAlertAction.init(title: "确定", style: .cancel, handler: nil)alert.addAction(cancel)self.show(alert, sender: nil)}}private func showPhotoLibrary() {if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {imagePickerController.sourceType = .photoLibraryimagePickerController.delegate = selfself.show(imagePickerController, sender: nil)} else {let alert = UIAlertController.init(title: "提示", message: "不能打开相册", preferredStyle: .alert)let cancel = UIAlertAction.init(title: "确定", style: .cancel, handler: nil)alert.addAction(cancel)self.show(alert, sender: nil)}}func showImagePickerController() {let sheet = UIAlertController.init(title: "请选择", message: nil, preferredStyle: .actionSheet)let cancel = UIAlertAction.init(title: "取消", style: .cancel, handler: nil)let camera = UIAlertAction.init(title: "拍照", style: .default) {(alert) inself.showCamera()}let photo = UIAlertAction.init(title: "相册", style: .default) {(alert) inself.showPhotoLibrary()}sheet.addAction(camera)sheet.addAction(photo)sheet.addAction(cancel)self.show(sheet, sender: nil)}//保存图片至沙盒private func saveImage(currentImage: UIImage, persent: CGFloat, imageName: String){if let imageData = UIImageJPEGRepresentation(currentImage, persent) as NSData? {let fullPath = NSHomeDirectory().appending("/Documents/").appending(imageName)imageData.write(toFile: fullPath, atomically: true)print("fullPath=\(fullPath)")}}private func saveImage(currentImage: UIImage, newSize: CGSize, imageName: String){//压缩图片尺寸UIGraphicsBeginImageContext(newSize)currentImage.draw(in: CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height))if let newImage = UIGraphicsGetImageFromCurrentImageContext() {//UIImageJPEGRepresentation此方法可将图片压缩,但是图片质量基本不变,第二个参数即图片质量参数。if let imageData = UIImageJPEGRepresentation(newImage, 1) as NSData? {let fullPath = NSHomeDirectory().appending("/Documents/").appending(imageName)imageData.write(toFile: fullPath, atomically: true)print("fullPath=\(fullPath)")}}}//MARK:- UIImagePickerControllerDelegatefunc imagePickerController(_ picker:UIImagePickerController, didFinishPickingMediaWithInfo info: [String :Any]){var image: UIImage?if(picker.allowsEditing){//裁剪后图片image = info[UIImagePickerControllerEditedImage] as? UIImage}else{//原始图片image = info[UIImagePickerControllerOriginalImage] as? UIImage}if image != nil {saveImage(currentImage: image!, newSize: imageSize, imageName: imageName)let fullPath = NSHomeDirectory().appending("/Documents/").appending(imageName)let savedImage: UIImage = UIImage(contentsOfFile: fullPath)!didFinishPickingBlock?(savedImage)//在这里调用网络通讯方法,上传头像至服务器...}picker.dismiss(animated: true, completion: nil)}func imagePickerControllerDidCancel(_ picker:UIImagePickerController){picker.dismiss(animated:true, completion:nil)}}

Swift调用相机和系统相册相关推荐

  1. uni-app用uni.chooseImage API调用相机或从相册中选择图片

    uni-app用uni.chooseImage API调用相机或从相册中选择图片 chooseImage: function() {var _this = this;uni.chooseImage({ ...

  2. Android 网页h5 Input选择相机和系统相册

    需求: 网页h5的input选择相机和系统相册,并且返回压缩的图片到h5. 代码: 1.WebView代码 package com.zql.sdk;import android.app.Activit ...

  3. Android踩坑日记:监听软键盘多次调用和刷新系统相册和获取所有相片

    EditText设置监听软键盘删除键(或enter) 一般使用方法 edittext.setOnKeyListener(new View.OnKeyListener(){@Overridepublic ...

  4. h5(网页) 调用相机拍照和相册,实现图片上传功能

    情景描述: 一个h5或者网页中需要上传图片功能,并且这个功能可以选择本地的图片或者拍照上传: 实现方法: 我们在网页中是可以直接调用手机的相机或者上传本地图片的,也就是说,我们是有使用本地图片文件和 ...

  5. vue h5(网页) 调用相机拍照和相册,实现多张图片上传功能

    第一种需求:只需要使用本地的图片资源 <input id="upload" type="file" accept="image/*;" ...

  6. 坚果手机2系统相册问题

    坚果手机2系统相册问题 一.故事开始 二.广告接踵而至 1. 莫名其妙多出来的短视频 2. 怪异的负一屏功能 3. 超多超多的广告 三.无奈的消费者 四.生活还要继续 五.附录 1. 测试结果 六.F ...

  7. html5 调用系统相册,iOS之H5调用系统相册相机浏览文件

    在我们iOS开发中大家遇到过H5和原生交互,需要上传文件,刚开始的思路肯定是在之前轻车熟路的js交互中原生方法获取文件之后上传,今天我们了解一个新的方法,其实苹果官方给我们提供了一个更简单的方法, H ...

  8. iOS——调用系统相册和相机

    iOS--调用系统相册和相机 背景 我们在许多app里可以发现在换头像的时候一般有两个选择,一个是选择本地照片,一个选择是相机也就是直接拍一张照片当头像,另外还有就是可以去修改照片尺寸,所以我们就要知 ...

  9. android拍照保存到系统相册,调用系统相机拍照,并且保存到系统相册的一般套路...

    最近遇到也一个需求:调用系统相机拍照,并且照片可以在系统相册显示. 关于照片显示在系统相册这个问题,因为安卓机型太多了,各大厂商都对原生系统进行了不同程度的定制,所以在一般情况下,有的手机会把图片直接 ...

最新文章

  1. C语言位操作--判断整数是否为2的幂
  2. 运行Google CTemplate首页的例子遇到_CrtIsValidHeapPointer异常
  3. android:process=.server,Android启动(三)----开启SystemServer进程
  4. Redis中的Sentinel故障转移
  5. SAP Fiori Launchpad tile instance creation
  6. 线程池的种类,区别和使用场景
  7. 【雅礼集训2017】字符串【后缀自动机】【数据分治】
  8. Educational Codeforces Round 106 (Rated for Div. 2)
  9. 从用户不足2000万到27亿,这项技术真要上天了?
  10. 创建variant二维数组
  11. 当10年BI数据总监遇到烂需求、烂数据时,他做了这几件事
  12. c语言编写界面图形表示,「分享」C语言如何编写图形界面
  13. Unity实现播放Ogg格式视频功能实现
  14. unlock-music-desktop解锁加密音乐桌面版
  15. 中蜂几月份自然分蜂_中蜂养殖,如何给蜜蜂分蜂?时间是关键
  16. 考驾照--驾驶证考试
  17. 一款高效读书笔记app推荐
  18. # 北京市职业技能提升管理平台#大数据#
  19. 代码同时托管到github和oschina上
  20. 【Paraview教程】第一章安装与基础介绍

热门文章

  1. 在python中、x=x+1是合法语句吗_Python x=x+1和x+=1之间的差异
  2. 为什么在GAN中使用KL散度会出现模式坍缩的问题?
  3. 强大的 Postman --- API 管理工具
  4. C语言 模拟计算器实现
  5. 【socket 截断】socket pickle data was truncated
  6. 80后阿里P10,“关老板”如何带着MaxCompute一路升级? 1
  7. springboot kafka 怎样关闭kafka的在控制台打印的日志
  8. [转]火影忍者疾风传275集
  9. Android 热修复之nuwa使用简略
  10. html css xml,XML HTML CSS理论知识复习