为什么我的 AVCapturePhotoOutput 文件输出这么大?
Why are my AVCapturePhotoOutput file outputs so large?
我正在创建一个相机应用程序,一切正常,但上传到 Firebase 的照片文件大小太大。它们属于 3MB 类别,我希望它们属于 ±600KB 类别。
我已将 AVCapturePhotoSettings.isHighResolutionPhotoEnabled 设置为 false 但这似乎没有任何作用 AVCapturePhotoOutput.quality.balanced 仅适用于 iOS13+,这在我的情况下不起作用。
这是将图像发送到我的 imageArray 的委托函数
extension NewPostFromPhoto: AVCapturePhotoCaptureDelegate {
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
if let error = error {
debugPrint (error)
} else {
photoData = photo.fileDataRepresentation()
UIImageWriteToSavedPhotosAlbum(UIImage(data: photoData!)!, nil, nil, nil)
self.imageArray.insert((UIImage(data: photoData!)?.fixOrientation())!, at:0)
self.recentMediaCollection.reloadData()
}
}
}
这是我的 takePhoto() 方法:
func takeNewPhoto () {
let settings = AVCapturePhotoSettings ()
settings.isHighResolutionPhotoEnabled = false
photoOutput?.capturePhoto(with: settings, delegate: self)
}
使用你的代码我得到了大约 20 MB 的 pngData。但是当我们使用 jpegData() 时,我们得到了大约 2.2 MB。
image.jpegData(compressionQuality: 0.8)
这里是委托人的完整代码
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
guard let imageData = photo.cgImageRepresentation() else {
self.captureFailed(error: error?.localizedDescription ?? "Can't take image from output")
return
}
let cgimage = imageData.takeUnretainedValue()
let orientation: UIImage.Orientation = captureDevice?.position == .front ? .leftMirrored : .right
let image = UIImage(cgImage: cgimage, scale: 1, orientation: orientation)
let data = image?.jpegData(compressionQuality: 0.8)
}
希望对你有所帮助
我正在创建一个相机应用程序,一切正常,但上传到 Firebase 的照片文件大小太大。它们属于 3MB 类别,我希望它们属于 ±600KB 类别。
我已将 AVCapturePhotoSettings.isHighResolutionPhotoEnabled 设置为 false 但这似乎没有任何作用 AVCapturePhotoOutput.quality.balanced 仅适用于 iOS13+,这在我的情况下不起作用。
这是将图像发送到我的 imageArray 的委托函数
extension NewPostFromPhoto: AVCapturePhotoCaptureDelegate {
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
if let error = error {
debugPrint (error)
} else {
photoData = photo.fileDataRepresentation()
UIImageWriteToSavedPhotosAlbum(UIImage(data: photoData!)!, nil, nil, nil)
self.imageArray.insert((UIImage(data: photoData!)?.fixOrientation())!, at:0)
self.recentMediaCollection.reloadData()
}
}
}
这是我的 takePhoto() 方法:
func takeNewPhoto () {
let settings = AVCapturePhotoSettings ()
settings.isHighResolutionPhotoEnabled = false
photoOutput?.capturePhoto(with: settings, delegate: self)
}
使用你的代码我得到了大约 20 MB 的 pngData。但是当我们使用 jpegData() 时,我们得到了大约 2.2 MB。
image.jpegData(compressionQuality: 0.8)
这里是委托人的完整代码
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
guard let imageData = photo.cgImageRepresentation() else {
self.captureFailed(error: error?.localizedDescription ?? "Can't take image from output")
return
}
let cgimage = imageData.takeUnretainedValue()
let orientation: UIImage.Orientation = captureDevice?.position == .front ? .leftMirrored : .right
let image = UIImage(cgImage: cgimage, scale: 1, orientation: orientation)
let data = image?.jpegData(compressionQuality: 0.8)
}
希望对你有所帮助