Swift使用UIImagePickerController 从相册选择图片、从相机选择图片

article/2025/10/1 12:18:22

配置:

如果是相机使用,需要在info.plist文件增加使用前应用程序说明;相机使用也是如此。(第二个是CALENDARS权限,打错了;图片是Photo Library Usage Description)
在这里插入图片描述

从相册选择图片:

使用UIImagePickerController进行图片选择需要实现UIImagePickerControllerDelegate, UINavigationControllerDelegate这两个代理。因为图片选择视图控制器属于系统内定义的NavigationController。

import UIKitclass ImageViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {var buttonSelect: UIButton!var imageView: UIImageView!private func initView(){buttonSelect = UIButton(type: .system)buttonSelect.setTitle("Select", for: UIControl.State.normal)buttonSelect.frame = CGRect(x: ((self.view.frame.width / 2) - 35), y: (self.view.frame.width - 200), width: 70, height: 30)buttonSelect.addTarget(self, action: #selector(selectPicture), for: UIControl.Event.touchDown)self.view.addSubview(buttonSelect)imageView = UIImageView(frame: CGRect(x: ((self.view.frame.width / 2) - 120), y: ((self.view.frame.height / 2) + 50), width: 240, height: 240))imageView.image = UIImage(named: "taylor")self.view.addSubview(imageView)}override func viewDidLoad() {super.viewDidLoad()// Do any additional setup after loading the view.initView()}@objc func selectPicture(){// 设置源为相机if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {//创建图片选择控制器let pickerVC = UIImagePickerController()pickerVC.delegate = self// 设置源为相机pickerVC.sourceType = UIImagePickerController.SourceType.photoLibraryself.present(pickerVC, animated: true, completion: nil)} else {print("------> ERROR")}}func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {print("------> INFO:\(info)")let image: UIImage!image = info[.originalImage] as? UIImageself.imageView.image = imagepicker.dismiss(animated: true, completion: nil)}}

需要说明的是,info这个对象是个数组,里面存放的是原始图片与修改后的图片。例如info[.originalImage]是原始图片。

从相机选择图片:

import UIKitclass ImageViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {var buttonSelect: UIButton!var imageView: UIImageView!private func initView(){buttonSelect = UIButton(type: .system)buttonSelect.setTitle("Select", for: UIControl.State.normal)buttonSelect.frame = CGRect(x: ((self.view.frame.width / 2) - 35), y: (self.view.frame.width - 200), width: 70, height: 30)buttonSelect.addTarget(self, action: #selector(selectPicture), for: UIControl.Event.touchDown)self.view.addSubview(buttonSelect)imageView = UIImageView(frame: CGRect(x: ((self.view.frame.width / 2) - 120), y: ((self.view.frame.height / 2) + 50), width: 240, height: 240))imageView.image = UIImage(named: "taylor")self.view.addSubview(imageView)}override func viewDidLoad() {super.viewDidLoad()// Do any additional setup after loading the view.initView()}@objc func selectPicture(){if UIImagePickerController.isSourceTypeAvailable(.camera) {let pickerVC = UIImagePickerController()pickerVC.delegate = selfpickerVC.sourceType = UIImagePickerController.SourceType.cameraself.present(pickerVC, animated: true, completion: nil)} else {print("------> ERROR")}}func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {print("------> INFO:\(info)")let image: UIImage!image = info[.originalImage] as? UIImageself.imageView.image = imagepicker.dismiss(animated: true, completion: nil)}}

闪光灯开启:

pickerVC.cameraFlashMode = UIImagePickerControllerCameraFlashMode.On

使用后置相机:

if UIImagePickerController.isCameraDeviceAvailable(UIImagePickerControllerCameraDevice.Front){pickerVC.cameraDevice = UIImagePickerControllerCameraDevice.Front
}

效果:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/B0dLLBiu.shtml

相关文章

摄影小白入门相机选择(个人出发)

1.微单与卡片机 在产品质量上,相机的感光器件CMOS这些,可以一概认为,同价同质。 两者的区别主要在镜头的设计,黑卡被设计为不可更换镜头式无反相机,入门级别的一般搭配标准变焦镜头 如16-55这种焦距,旗舰级…

机器视觉系统中相机镜头选型技巧_工业相机在机器视觉系统中的地位和作用

一、什么是工业相机 工业相机是机器视觉系统中的一个关键组件,其最本质的功能就是将光信号转变成有序的电信号。选择合适的相机也是机器视觉系统设计中的重要环节,相机的选择不仅直接决定所采集到的图像分辨率、图像质量等,同时也与整个系统的运行模式直接相关。 二、工业相…

栅格重投影(投影变换)

OpenLayers能够在不同的坐标系统中显示来自WMS、WMTS、静态图像和许多其他源的栅格数据。图像的地图重投影直接发生在web浏览器中。在任何Proj4js支持的坐标参考系统中都是可视的,并且以前不兼容的图层现在可以组合和叠加。 使用: API的使用非常简单。…

坐标系与投影变换

所有空间数据必须纳入到相同空间参考基准下才可以进行空间分析,因此坐标系和投影变换十分重要,这也是地理信息系统的基础。坐标系是数据或地图的属性,而投影是坐标系的属性。 一、地球形状(三级逼近) 地球表面→ 大地水…

Opencv——几何空间变换(仿射变换和投影变换)

几何空间变换 【1】几何变换(空间变换)简述【2】变换矩阵知识简述齐次坐标的概念几何运算矩阵 【3】图像的仿射变换1、平移变换2、比例缩放3、旋转4、对称变换(不做展示)1、关于X轴变换2、关于Y轴变换3、关于直线YX变换4、关于直线…

仿射变换和投影变换

1. 仿射变换 1) 用途 旋转 (线性变换),平移 (向量加).缩放(线性变换),错切,反转 2) 方法 仿射变换是一种二维坐标到二维坐标之间的线性变换,它保持了二维图形的“平直性”(直线经过变换之后依然是直线&…

三维图形的投影变换

1.平行投影: 1.1 正轴投影: 我们通常说的三视图是指正视图、俯视图和侧视图, 投影平面分别与 x,y,z 轴垂直。 正视图:(yz) 俯视图:(xy) 侧视图:(xz) 1.2 正轴测投影: 如图: 咱们希望按照这个平面对物体进行平行投影: 首先,先把物体及投影面沿着y轴顺时针旋转,在绕x轴逆时针…

华科_图形学笔记_07_投影变换

计算机图形学_华中科技大学_中国大学MOOC(慕课) 7.1_有趣的投影 由于我们的观察设备是二维的,因此,最终都存在一个三维向二维的映射过程。这个映射过程,按照几何意义来说就是投影。 而在我们之前讲到的观察变换中,其实还有一个隐…

Opengl投影变换理解

坐标到达观察空间之后,我们需要将其投影到裁剪坐标。裁剪坐标会被处理至-1.0到1.0的范围内,并判断哪些顶点将会出现在屏幕上。 而[-1.0,1.0]构成的正方体又叫规则观察体(Canonical View Volume, CVV) 一、流程 计算机显示器是一个 2D 表面。OpenGL 渲染…

图形学-(视图变换,投影变换)

1.视图变换 在 3 维物体变到二维平面的过程中,我们需要规定好相机的位置。对于相机所做的变换就是视图变换 (Viewing/Camera transformation)。 我们需要对相机位置进行定义,对于一个相机我们要规定下面三个属性: 相…

4.3 投影变换

投影变换的目的就是定义一个视景体,使得视景体外多余的部分裁剪掉,最终图像只是视景体内的有关部分。 投影也是使用矩阵来实现的。计算一个用于实现透视投影或者平行投影的矩阵,并把它与当前的投影矩阵(一般是单位矩阵)相乘。 OpenGL支持两种类型的投影变换,即透视投影…

读书笔记-opencv-投影变换

读书笔记-opencv-投影变换 原理解析 ​ 透视变换是将图片投影到一个新的视平面,也称作投影映射.它是二维(x,y)到三维(X,Y,Z),再到另一个二维(x′,y′)空间的映射.相对于仿射变换,它提供了更大…

计算机图形学 | 投影变换

计算机图形学 | 投影变换 计算机图形学 | 投影变换7.1 有趣的投影投影的概念平行投影正投影斜投影 透视投影 7.2 规范化的投影变换观察的要素观察空间规范化的投影变换 华中科技大学《计算机图形学》课程 MOOC地址:计算机图形学(HUST) 计算…

使用 OpenCV 进行图像投影变换

投影变换(仿射变换) 在数学中,线性变换是将一个向量空间映射到另一个向量空间的函数,通常由矩阵实现。如果映射保留向量加法和标量乘法,则映射被认为是线性变换。 要将线性变换应用于向量(即,一…

Opencv之投影变换

学习资料参考: 张平.《OpenCV算法精解:基于Python与C》.[Z].北京.电子工业出版社.2017. 原理 平面的物体若在三维空间发生了旋转,那么这就是投影变换。平面的物体可以借助二维投影变换进行三维变换模型化得到修正。 处理函数 c中的getPersp…

ArcMap 投影变换

在投影变换之前,首先需要理清出我们拿到的工程数据到底是哪一个投影坐标系,只有清楚是哪一个坐标系才能给我们矢量化出来的数据进行定义投影(如果是当地的投影坐标系,可以查看自定义投影坐标系文章,新建出当地的投影坐…

OpenCV : 投影变换

投影变换 物体在三维空间发生了旋转,叫做投影变换.由于可能出现阴影或遮挡,所以变换后较难复原.如果物体时平面的,就可以通过投影变换物体三维变换进行模型化,这叫做专用的二维投影变换. 矩阵表示: [ x ~ y ~ z ~ ] [ a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ] [ x …

Halcon 第七章『图像的几何变换』◆第2节:投影变换

一、介绍 投影变换也叫透射变换、投影映射。透射变换是将图像投影到一个新的视平面,是一种二维坐标到三维坐标的变换。 透射变换是仿射变换的延续,也可以说仿射变换是透射变换的一种特殊形式。其特殊性在于变换后图像的形状仍然维持原状。投影变换包括的…

投影变换原理和用法

一、定义:投影变换也叫透射变换、投影映射。透射变换是将图像投影到一个新的视平面,是一种二维坐标到三维坐标的变换。 透射变换是仿射变换的延续,也可以说仿射变换是透射变换的一种特殊形式。其特殊性在于变换后图像的形状仍然维持原状。投影…