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

替代已废弃jpegStillImageNSDataRepresentation方法的方案咨询

替代废弃的AVCaptureStillImageOutput获取JPEG数据的方案

核心替代方式

原来的AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(_:)方法,在AVCapturePhotoOutput体系下,是通过AVCapturePhoto对象的fileDataRepresentation()方法来获取JPEG数据的。和旧API直接转换SampleBuffer不同,新API采用委托回调的方式处理拍照结果。

实现步骤及代码示例

  1. 配置拍照输出和设置
    创建AVCapturePhotoOutput实例并添加到捕获会话,同时配置JPEG格式的拍照参数。
  2. 触发拍照并实现委托回调
    调用拍照方法后,在委托回调里从AVCapturePhoto对象中提取JPEG数据。

完整代码示例

// 初始化并配置拍照输出
let photoOutput = AVCapturePhotoOutput()
// 假设已将photoOutput添加到AVCaptureSession实例中

// 配置JPEG格式的拍照设置
let photoSettings = AVCapturePhotoSettings(format: [AVVideoCodecKey: AVVideoCodecType.jpeg])
// 可根据需求调整分辨率、闪关灯等其他设置

// 触发拍照,当前类需遵循AVCapturePhotoCaptureDelegate协议
photoOutput.capturePhoto(with: photoSettings, delegate: self)

// 实现委托回调方法
extension YourViewController: AVCapturePhotoCaptureDelegate {
    func captureOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
        guard error == nil else {
            print("拍照出错:\(error!)")
            return
        }
        
        // 获取JPEG数据,替代旧API的转换方法
        if let jpegData = photo.fileDataRepresentation() {
            // 这里可以使用jpegData做后续处理,比如保存、上传
            print("获取到JPEG数据,大小:\(jpegData.count)字节")
        } else {
            print("无法提取JPEG数据")
        }
    }
}

特殊场景补充

如果确实需要从CMSampleBuffer直接转换JPEG数据(比如兼容旧逻辑),可以手动通过Core Image解析,但效率不如官方推荐的委托方式:

func convertSampleBufferToJPEG(_ sampleBuffer: CMSampleBuffer) -> Data? {
    guard let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return nil }
    let ciImage = CIImage(cvImageBuffer: imageBuffer)
    let context = CIContext(options: [.useSoftwareRenderer: false])
    return context.jpegRepresentation(of: ciImage, colorSpace: ciImage.colorSpace!, options: [.quality: 0.8])
}

内容的提问来源于stack exchange,提问作者dàhóngpáo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 00:06:25