SwiftUI图像选择器,来自相机的url图像



在我的SwiftUI项目中,我需要使用图像的url,以便在项目的其他部分中重用。

我创建了这个图像选择器,允许我在手机相册或用iPhone相机拍摄新照片(使用var shootNew:Bol(之间进行选择

我面临以下问题:当我使用选择器从相册中选择图像时,我会获得图像的url,但当我想用相机拍摄新照片时,我无法获得新照片的url,

如何获取用相机拍摄的图片的url?

这是我的图像选择器

struct ImagePickerNew: UIViewControllerRepresentable {

var shootNew: Bool
var needEdit: Bool

@Binding var image: UIImage?
@Binding var isPresented: Bool
@Binding var imageUrl : URL?

class Coordinator: NSObject, UINavigationControllerDelegate, UIImagePickerControllerDelegate {

var shootNew: Bool
var needEdit: Bool
@Binding var image: UIImage?
@Binding var isPresented: Bool
@Binding var imageUrl : URL?
init(shootNew: Bool, needEdit: Bool, image: Binding<UIImage?>, isPresented:Binding<Bool>, imageURL1 : Binding<URL?>) {
self.shootNew = shootNew
self.needEdit = needEdit
_image = image
_isPresented = isPresented
_imageUrl = imageURL1
}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

if let imageEdited = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {
self.image = imageEdited

} else {
self.image = (info[UIImagePickerController.InfoKey.originalImage] as! UIImage)
}
if let imageURLEdited = info[UIImagePickerController.InfoKey.imageURL] as? URL{
self.imageUrl = imageURLEdited
debugPrint("ho url")
} else {
debugPrint("UNABLE URL")
}
self.isPresented = false
}

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
self.isPresented = false
}
}

func makeCoordinator() -> Coordinator {
return Coordinator(shootNew: shootNew, needEdit: needEdit, image: $image, isPresented: $isPresented, imageURL1: $imageUrl)
}

func makeUIViewController(context: UIViewControllerRepresentableContext<ImagePickerNew>) -> UIImagePickerController {
let picker = UIImagePickerController()
picker.delegate = context.coordinator
picker.navigationController?.delegate = context.coordinator
picker.sourceType = shootNew ? .camera : .photoLibrary
picker.allowsEditing = needEdit
picker.mediaTypes = [kUTTypeImage] as [String]
return picker
}

func updateUIViewController(_ uiViewController: UIImagePickerController,
context: UIViewControllerRepresentableContext<ImagePickerNew>) {

}

}

非常感谢你帮我。

您无法获取相机拍摄的照片的URL,因为它还没有写入磁盘,您应该先将照片数据写入临时文档文件夹,然后再获取URL。这里有一个例子:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

var selectedImage: UIImage!
var imageUrl: URL!

if let image = info[UIImagePickerController.InfoKey.editedImage] as? UIImage {
selectedImage = image
} else if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
selectedImage = image
}

if picker.sourceType == UIImagePickerController.SourceType.camera {

let imgName = "(UUID().uuidString).jpeg"
let documentDirectory = NSTemporaryDirectory()
let localPath = documentDirectory.appending(imgName)

let data = selectedImage.jpegData(compressionQuality: 0.3)! as NSData
data.write(toFile: localPath, atomically: true)
imageUrl = URL.init(fileURLWithPath: localPath)
} else if let selectedImageUrl = info[UIImagePickerController.InfoKey.imageURL] as? URL {
imageUrl = selectedImageUrl
}
self.mainImageView.image = selectedImage
MediaAPI.uploadMedia(fileUrl: imageUrl)
self.dismiss(animated: true, completion: nil)
}

最新更新