TL;DR: ARKit中iOS14版本的capturedImage发生了变化,我们无法将其融入我们的流程中。
使用Xcode 12 GM构建,在iPhone 6S 14.0上进行测试。我们已经实现了一个流程,其中将ARFrame转换为Data,对于尚未升级到iOS14的设备,这个流程可以完美地工作。我们正在获取ciImage:
我们将其输入到一个
因此,问题是当我们调用
使用Xcode 12 GM构建,在iPhone 6S 14.0上进行测试。我们已经实现了一个流程,其中将ARFrame转换为Data,对于尚未升级到iOS14的设备,这个流程可以完美地工作。我们正在获取ciImage:
extension ARFrame {
var ciImage: CIImage { CIImage(cvPixelBuffer: capturedImage) }
}
我们将其输入到一个
ImageConverter
中:public class ImageConverter {
lazy var imageContext = CIContext(mtlDevice: MTLCreateSystemDefaultDevice()!)
lazy var colorSpace = CGColorSpace(name: CGColorSpace.sRGB)
public func jpgData(for image: CIImage) -> Data {
guard let colorSpace = colorSpace else { return Data() }
if let jpegRepresentation = imageContext.jpegRepresentation(of: image,
colorSpace: image.colorSpace ?? colorSpace) {
return jpegRepresentation
} else {
return Data()
}
}
}
因此,问题是当我们调用
.jpegRepresentation
时,会出现警告:findWriterForType:128: unsupported file format 'public.heic'
尽管jpegRepresentation
不是nil,但它对我们的服务器不起作用,因为我们的服务器期望jpeg数据(这对iOS13.7或以下设备仍然有效)。
到目前为止,我们尝试过:
if let heifRepresentation = imageContext.heifRepresentation(of: image,
format: .RGBA8,
colorSpace: image.colorSpace ?? colorSpace) {
return heifRepresentation
}
返回 nil,并抛出与.jpegRepresentation
相同的错误。也尝试了其他格式,但均失败。