Swift调用AVCapturePhoto的fileDataRepresentation报错如何转图片为Base64
问题解决
错误原因
报错Instance member 'fileDataRepresentation' cannot be used on type 'AVCapturePhoto'的核心原因是方法调用错误:fileDataRepresentation()是AVCapturePhoto的实例方法,你代码里直接用类名AVCapturePhoto调用了该方法,不符合语法要求。
实现逻辑
你需要通过回调返回的photo实例调用方法获取数据,再转Base64即可:
- 先处理回调的可选错误,避免异常情况
- 用
photo实例调用fileDataRepresentation()获取图片二进制数据 - 调用Data的
base64EncodedString()方法生成Base64编码
修正后的完整代码
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Swift.Error?) { // 先处理错误情况 if let error = error { print("拍摄照片出错: \(error.localizedDescription)") return } // 用实例调用方法获取二进制数据 guard let imageData = photo.fileDataRepresentation() else { print("获取照片数据失败") return } // 生成Base64编码 let base64Str = imageData.base64EncodedString() // 后续按需使用base64Str即可 print("照片Base64长度: \(base64Str.count)") }
补充说明
如果需要指定图片压缩质量,可改用带参数的重载方法自定义输出配置:photo.fileDataRepresentation(for: AVCapturePhotoSettings, replacementMetadata: [AnyHashable : Any]?)
内容的提问来源于stack exchange,提问作者Python 123
相关产品推荐
相关产品推荐

