You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过编程获取iPhone各机型的相机变焦级别(如0.5x、1x、2x)

如何通过编程获取iPhone相机变焦级别并实现类系统相机功能

可以通过AVFoundation框架实现,这是iOS系统相机底层依赖的框架,以下是具体方案:

一、获取设备支持的变焦档位

iPhone的固定变焦档位(如0.5x、1x、2x等)对应不同物理摄像头的切换阈值,或结合数码变焦的预设值,可通过以下方式获取:

  1. 获取物理摄像头的基础变焦值
    不同摄像头有各自的原生变焦系数:

    • 超广角摄像头默认对应0.5x
    • 广角摄像头默认对应1x
    • 长焦摄像头根据机型不同对应2x、3x或4x等
  2. 利用系统切换阈值获取完整档位
    通过AVCaptureDevice的virtualDeviceSwitchOverVideoZoomFactors属性,可获取系统自动切换摄像头的变焦因子数组,这些值就是系统相机显示的固定档位。

代码示例(Swift)

import AVFoundation

func fetchSupportedZoomLevels() -> [CGFloat] {
    guard let backWideCam = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back) else {
        return []
    }
    
    var zoomLevels = [CGFloat]()
    // 基础广角1x
    zoomLevels.append(1.0)
    
    // 添加超广角档位(通常0.5x)
    if let ultraWideCam = AVCaptureDevice.default(.builtInUltraWideCamera, for: .video, position: .back) {
        zoomLevels.append(ultraWideCam.activeFormat.videoMaxZoomFactor)
    }
    
    // 添加长焦档位(如2x、3x)
    if let teleCam = AVCaptureDevice.default(.builtInTelephotoCamera, for: .video, position: .back) {
        zoomLevels.append(teleCam.activeFormat.videoMinZoomFactor)
    }
    
    // 添加系统切换阈值对应的档位
    if let switchFactors = backWideCam.virtualDeviceSwitchOverVideoZoomFactors {
        zoomLevels.append(contentsOf: switchFactors)
    }
    
    // 去重并按从小到大排序
    return Array(Set(zoomLevels)).sorted()
}

二、实现类系统相机的变焦切换

要模拟系统相机的变焦操作,需结合摄像头切换与数码变焦:

  • 当用户选择固定档位时,优先切换到对应物理摄像头(如0.5x切换到超广角)
  • 若档位对应数码变焦(如部分机型的2x是广角数码变焦),则通过AVCaptureDevice的setVideoZoomFactor(_:)方法设置变焦值
  • 切换摄像头时,需先暂停AVCaptureSession,替换AVCaptureDeviceInput后再重启session

注意事项

  • 需提前请求相机权限(通过AVCaptureDevice.requestAccess(for:)),否则无法访问摄像头设备
  • 不同机型支持的变焦档位差异较大,必须动态获取,禁止硬编码数值
  • 部分高倍变焦档位依赖数码变焦,画质会随变焦倍数提升而下降

内容的提问来源于stack exchange,提问作者Ajay K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:50:37