gpt4 book ai didi

ios - 如何从 UIImage 获取 URL?

转载 作者:可可西里 更新时间:2023-11-01 02:12:35 28 4
gpt4 key购买 nike

我有一个 iOS 应用程序,用户可以通过两种方式获取图片:

  1. 从照片库中选择它(UIImagePickerController)

  2. 从定制相机中点击它

这是我的代码,用于点击来自自定义相机的图像(这是在名为 Camera 的自定义类中,它是 UIView 的子类)

func clickPicture(completion:@escaping (UIImage) -> Void) {

guard let videoConnection = stillImageOutput?.connection(withMediaType: AVMediaTypeVideo) else { return }

videoConnection.videoOrientation = .portrait
stillImageOutput?.captureStillImageAsynchronously(from: videoConnection, completionHandler: { (sampleBuffer, error) -> Void in

guard let buffer = sampleBuffer else { return }

let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(buffer)
let dataProvider = CGDataProvider(data: imageData! as CFData)
let cgImageRef = CGImage(jpegDataProviderSource: dataProvider!, decode: nil, shouldInterpolate: true, intent: .defaultIntent)

let image = UIImage(cgImage: cgImageRef!, scale: 1, orientation: .right)

completion(image)


})
}

下面是我在 ViewController 中点击图片的方式:

@IBAction func clickImage(_ sender: AnyObject) {
cameraView.clickPicture { (image) in
//use "image" variable
}
}

稍后,我尝试使用 CloudKit 将此图片上传到用户的 iCloud 帐户。但是我收到一条错误消息,指出记录太大。然后我遇到了this SO post ,它表示要使用 CKAsset。但是,CKAsset 的唯一构造函数需要一个 URL

有没有一种通用的方法可以从任何 UIImage 获取 URL?否则,如何从我使用自定义相机单击的图像中获取 URL(我已经看到其他 posts 关于从 UIImagePickerController 获取 url)?谢谢!

最佳答案

CKAsset 表示一些外部文件(图像、视频、二进制数据等)。这就是为什么它需要 URL 作为初始参数。

在你的情况下,我建议使用以下步骤将大图像上传到 CloudKit:

  1. UIImage 保存到本地存储(例如文档目录)。
  2. 使用本地存储中图像的路径初始化 CKAsset
  3. 将 Assets 上传到云端。
  4. 上传完成后从本地存储中删除图像。

这是一些代码:

// Save image.
let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
let filePath = "\(path)/MyImageName.jpg"

UIImageJPEGRepresentation(image, 1)!.writeToFile(filePath, atomically: true)

let asset = CKAsset(fileURL: NSURL(fileURLWithPath: filePath)!)
// Upload asset here.

// Delete image.
do {
try FileManager.default.removeItem(atPath: filePath)
} catch {
print(error)
}

关于ios - 如何从 UIImage 获取 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40570026/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com