Swift调用相机和系统相册
首先需要在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调用相机和系统相册相关推荐
- uni-app用uni.chooseImage API调用相机或从相册中选择图片
uni-app用uni.chooseImage API调用相机或从相册中选择图片 chooseImage: function() {var _this = this;uni.chooseImage({ ...
- Android 网页h5 Input选择相机和系统相册
需求: 网页h5的input选择相机和系统相册,并且返回压缩的图片到h5. 代码: 1.WebView代码 package com.zql.sdk;import android.app.Activit ...
- Android踩坑日记:监听软键盘多次调用和刷新系统相册和获取所有相片
EditText设置监听软键盘删除键(或enter) 一般使用方法 edittext.setOnKeyListener(new View.OnKeyListener(){@Overridepublic ...
- h5(网页) 调用相机拍照和相册,实现图片上传功能
情景描述: 一个h5或者网页中需要上传图片功能,并且这个功能可以选择本地的图片或者拍照上传: 实现方法: 我们在网页中是可以直接调用手机的相机或者上传本地图片的,也就是说,我们是有使用本地图片文件和 ...
- vue h5(网页) 调用相机拍照和相册,实现多张图片上传功能
第一种需求:只需要使用本地的图片资源 <input id="upload" type="file" accept="image/*;" ...
- 坚果手机2系统相册问题
坚果手机2系统相册问题 一.故事开始 二.广告接踵而至 1. 莫名其妙多出来的短视频 2. 怪异的负一屏功能 3. 超多超多的广告 三.无奈的消费者 四.生活还要继续 五.附录 1. 测试结果 六.F ...
- html5 调用系统相册,iOS之H5调用系统相册相机浏览文件
在我们iOS开发中大家遇到过H5和原生交互,需要上传文件,刚开始的思路肯定是在之前轻车熟路的js交互中原生方法获取文件之后上传,今天我们了解一个新的方法,其实苹果官方给我们提供了一个更简单的方法, H ...
- iOS——调用系统相册和相机
iOS--调用系统相册和相机 背景 我们在许多app里可以发现在换头像的时候一般有两个选择,一个是选择本地照片,一个选择是相机也就是直接拍一张照片当头像,另外还有就是可以去修改照片尺寸,所以我们就要知 ...
- android拍照保存到系统相册,调用系统相机拍照,并且保存到系统相册的一般套路...
最近遇到也一个需求:调用系统相机拍照,并且照片可以在系统相册显示. 关于照片显示在系统相册这个问题,因为安卓机型太多了,各大厂商都对原生系统进行了不同程度的定制,所以在一般情况下,有的手机会把图片直接 ...
最新文章
- C语言位操作--判断整数是否为2的幂
- 运行Google CTemplate首页的例子遇到_CrtIsValidHeapPointer异常
- android:process=.server,Android启动(三)----开启SystemServer进程
- Redis中的Sentinel故障转移
- SAP Fiori Launchpad tile instance creation
- 线程池的种类,区别和使用场景
- 【雅礼集训2017】字符串【后缀自动机】【数据分治】
- Educational Codeforces Round 106 (Rated for Div. 2)
- 从用户不足2000万到27亿,这项技术真要上天了?
- 创建variant二维数组
- 当10年BI数据总监遇到烂需求、烂数据时,他做了这几件事
- c语言编写界面图形表示,「分享」C语言如何编写图形界面
- Unity实现播放Ogg格式视频功能实现
- unlock-music-desktop解锁加密音乐桌面版
- 中蜂几月份自然分蜂_中蜂养殖,如何给蜜蜂分蜂?时间是关键
- 考驾照--驾驶证考试
- 一款高效读书笔记app推荐
- # 北京市职业技能提升管理平台#大数据#
- 代码同时托管到github和oschina上
- 【Paraview教程】第一章安装与基础介绍
热门文章
- 在python中、x=x+1是合法语句吗_Python x=x+1和x+=1之间的差异
- 为什么在GAN中使用KL散度会出现模式坍缩的问题?
- 强大的 Postman --- API 管理工具
- C语言 模拟计算器实现
- 【socket 截断】socket pickle data was truncated
- 80后阿里P10,“关老板”如何带着MaxCompute一路升级? 1
- springboot kafka 怎样关闭kafka的在控制台打印的日志
- [转]火影忍者疾风传275集
- Android 热修复之nuwa使用简略
- html css xml,XML HTML CSS理论知识复习