如何从UIImage获取URL?
问题描述:
我有一个iOS应用程序,其中有2种方式,用户可以得到一个画面:如何从UIImage获取URL?
从照片库中选择它(
UIImagePickerController
)从定制的相机点击它
这里是我的代码点击自定义相机的图像(这是在一个名为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
?否则,如何从我使用自定义相机单击的图像(我看到其他posts关于从UIImagePickerController
获取网址)中获得URL
?谢谢!
答
CKAsset
代表一些外部文件(图像,视频,二进制数据等)。这就是为什么它需要URL
作为初始参数。
在你的情况我会建议使用以下步骤以大图片上传到CloudKit:
- 保存
UIImage
到本地存储(例如,文档目录)。 - 初始化
CKAsset
带本地存储器中映像的路径。 - 将资产上传到云。
- 上传完成后从本地存储中删除图像。
下面是一些代码:
// 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)
}
+0
感谢您的回复!但是,在将记录保存到CloudKit时,我正在获取以下错误:“没有这样的文件或目录”。什么可能导致这个? – penatheboss
我怎么会创建一个临时位置网址? – penatheboss