Swift-技巧(四)设置照片尺寸和格式
摘要
平时实现拍照功能时,都是网上一通搜索,整体复制粘贴,自称无脑实现。但是当要求照片是不同的尺寸和格式( JPEG)时,就费力搞照片。其实在设置拍照时,就可以直接设置照片的尺寸和格式,用直接的方法来满足要求,岂不更好?
开始拍照前,需要创建 AVCaptureSession 会话对象,如果仅仅是拍照就需要再创建 AVCapturePhotoOutput 对象,预览页面在 AVCaptureVideoPreviewLayer 类的对象中呈现,捕捉照片时调用 AVCapturePhotoOutput 对象的 capturePhoto(with:, delegate:) 函数。如果对这个流程感兴趣,给我留言,我会详细的梳理这个流程,接下来进入本期的重点。
设置图片的尺寸
设置图片的尺寸要用到 sessionPreset 属性,在设置 AVCaptureSession 会话配置时进行设置。
那么 sessionPreset 是做什么的?有这么大的能量?
根据苹果文档的解释来看,它是指示会话当前正在使用的的预设会话。这个设置会影响视频流或者图片的尺寸大小(这里指的是像素,特别注意)。
可以设置的尺寸是和 AVCaptureSession.Preset 这个枚举属性是一一对应的,感兴趣的可以在 Xcode 中追进去看一下,这里简单列出几项:

要特别注意两点,这里的是先 height 后 width,图片已经红色框出来了,这个尺寸是以像素为单位。
接下来就简单了,根据需要照片的尺寸直接设置即可(默认是 .high):
captureSession.sessionPreset = .high
设置图片的格式
这里主要说明怎么将照片的格式设置为 JPEG。其实它还支持其他的格式,这里告诉方式,其他的格式直接追代码就可以查看到。
如果稍有留意的看官,会发现捕捉照片的函数 capturePhoto(with settings: AVCapturePhotoSettings, delegate: AVCapturePhotoCaptureDelegate) 中要传入 AVCapturePhotoSettings 类型的对象,那么就在这里面设置咱需要的照片格式:
// 验证设备是否支持某一个格式
self.photoOutput.availablePhotoCodecTypes.contains(AVVideoCodecType(rawValue: AVVideoCodecJPEG)) {
// 设置图片格式
photoSettings = AVCapturePhotoSettings(format: [AVVideoCodecKey: AVVideoCodecJPEG])
}
然后将 photoSettings 对象传入 capturePhoto 函数中,获取的照片就是自己设置的格式了。这里面有很多其他的格式,详细的可以追一下 AVVideoCodecType 类型看看。
镜像是什么?
这里简单提一下,如果项目中也使用到前置摄像头来捕捉照片,会发现在同一个环境中,捕捉到的照片和后置摄像头捕捉到的照片对比发现,竟然最有颠倒了。那么如何去在捕获的时候就翻转过来呢?
这里就需要在设置输出对象的连接是设置 isVideoMirrored,当设置为 true 时,就会将捕捉的照片镜像翻转。
// 输出的连接对象
if let connection = self.photoOutput.connection(with: .video) {
// 设置是否镜像,默认是 false
connection.isVideoMirrored = true
}
题外话
时间仓促,说的东西可能不全面,在你实现过程中遇到什么问题,评论区给我留言,我会尽快回复
Swift-技巧(四)设置照片尺寸和格式的更多相关文章
- jQuery操作复选框checkbox技巧总结 ---- 设置选中、取消选中、获取被选中的值、判断是否选中等
转载:https://blog.csdn.net/chenchunlin526/article/details/77448168 jQuery操作复选框checkbox技巧总结 --- 设置选中.取消 ...
- Linux学习笔记之如何设置vim中的格式如行号等
在我们编写代码程序时,我们时常想追求更好的格式,下面写一下我认为挺实用的格式命令以及如何更改 如果我们打开vim在其命令模式中输入格式命令时,下一次重新打开vim还是会和原先一样,所以我们需更改其配置 ...
- POI按照源单元格设置目标单元格格式
原文:http://jjw198874.blog.163.com/blog/static/1889845522011102401854234/ POI按照源单元格设置目标单元格格式 poi按照一个源单 ...
- C#winform设置DateTimePicker的时间格式
在对DateTimePicker进行时间格式设置时候,要先对属性Format设置为"Custom"自定义格式,然后再CustomFormat里面进行格式设置 比如"yyy ...
- 将“Cocos2dx-截屏并设置图片尺寸 ”中cocos2d-x代码转换为2.2的代码
Cocos2dx-截屏并设置图片尺寸: http://www.cocos2dev.com/?p=522 2.2 代码如下: void HelloWorld::screenShoot() { CCSiz ...
- iOS 11 导航栏 item 偏移问题 和 Swift 下 UIButton 设置 title、image 显示问题
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...
- Nginx配置中的log_format用法梳理(设置详细的日志格式)
nginx服务器日志相关指令主要有两条:一条是log_format,用来设置日志格式:另外一条是access_log,用来指定日志文件的存放路径.格式和缓存大小,可以参加ngx_http_log_mo ...
- 原创:如何实现在Excel通过循环语句设置指定行的格式
原创:如何实现在Excel通过循环语句设置指定行的格式 一.需求: 想让excel的某些行(比如3的倍数的行)字体变成5号字 如何整: 二.实现: Sub code() To Range(" ...
- swift关于UIView设置frame值的extension
swift关于UIView设置frame值的extension 使用 说明 1. 使用如上图,很简单,不再赘述 2. 在extension给添加的计算属性提供getter,setter方法即可 源码 ...
随机推荐
- 5UCMS判断当前栏目高亮(用于当前所在栏目加背景图片或颜色)
5UCMS判断当前栏目高亮标签 比较简单的是频道页(channel.html): 大类代码: <!--menu:{ $row=10 $table=channel }--> <li { ...
- Docker系列(6)- 常用命令(2) | 镜像命令
准备工作 知道查看官方文档,官方文档描述的很详细,并且每一种类型.每一个命令的选项都有例子 会使用docker --help查看 镜像命令 docker images 查看所有本地主机上的镜像 [ro ...
- Appium WebView控件定位
背景 移动应用可以粗分为三种:原生应用(native app), 网页应用(web app,或HTML5 app),以及它们的混血儿--混合模式移动应用(hybrid app). 什么是Hybrid ...
- git pull 时remote: HTTP Basic: Access denied解决方案
当qian windows用户密码过期更改了密码后,操作git pull 拉取远程仓库代码或git push时报错 如下:remote: HTTP Basic: Access denied Auth ...
- 鸿蒙内核源码分析(文件句柄篇) | 深挖应用操作文件的细节 | 百篇博客分析OpenHarmony源码 | v69.01
百篇博客系列篇.本篇为: v69.xx 鸿蒙内核源码分析(文件句柄篇) | 深挖应用操作文件的细节 | 51.c.h.o 文件系统相关篇为: v62.xx 鸿蒙内核源码分析(文件概念篇) | 为什么说 ...
- P5405-[CTS2019]氪金手游【树形dp,容斥,数学期望】
前言 话说在\(Loj\)下了个数据发现这题的名字叫\(fgo\) 正题 题目链接:https://www.luogu.com.cn/problem/P5405 题目大意 \(n\)张卡的权值为\(1 ...
- python-matplotlib学习(1)
1 import matplotlib.pyplot as plt 2 import numpy as np 3 4 x=np.linspace(-1,1,50) 5 y=2*x+1 6 plt.pl ...
- 如何借助 JuiceFS 为 AI 模型训练提速 7 倍
背景 海量且优质的数据集是一个好的 AI 模型的基石之一,如何存储.管理这些数据集,以及在模型训练时提升 I/O 效率一直都是 AI 平台工程师和算法科学家特别关注的事情.不论是单机训练还是分布式训练 ...
- 被校园网限速限流的日子 | 路由代理ipv6访问的操作手册
一 前 言 你是否还在为校园网的收费而小心翼翼?你是否还在为网速不够快而影响科研进程? 你是否还在为处理舍友关系而费经心思? 你是否还在为不能给舍友提供价值而苦恼? 那么,叶子团队或许能够帮助到你解决 ...
- 感恩笔记之SQL查询功能最简使用模板
感恩笔记之SQL查询功能最简使用模板 第一部分:SQL单表功能 1 语句主要关键字 SELECT --查询数据列 INTO --新建数据表 FROM --查询数据表 WHERE --筛选数据表结果 O ...