保存照片并立即使用

我有以下代码拍摄照片并将其保存到相机胶卷。 我需要能够在那里使用它,然后保存,而不必回到画廊,select它。

我还没有find如何做到这一点的例子。

@IBOutlet weak var imagePicked: UIImageView! @IBAction func CameraBtn(sender: UIButton) { if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera) { var imagePicker = UIImagePickerController() imagePicker.delegate = self imagePicker.sourceType = UIImagePickerControllerSourceType.Camera; imagePicker.allowsEditing = false self.presentViewController(imagePicker, animated: true, completion: nil) cameraBool = true } } @IBAction func GalleryBtn(sender: UIButton) { println("gallery button clicked") if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.PhotoLibrary) { var imagePicker = UIImagePickerController() imagePicker.delegate = self imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary; imagePicker.allowsEditing = true self.presentViewController(imagePicker, animated: true, completion: nil) cameraBool = false } } func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) { imagePicked.image = image if (cameraBool){ var imageData = UIImageJPEGRepresentation(imagePicked.image, 0.6) var compressedJPGImage = UIImage(data: imageData) UIImageWriteToSavedPhotosAlbum(compressedJPGImage, nil, nil, nil) } self.dismissViewControllerAnimated(true, completion: nil); } 

我需要能够在以下web服务function中使用这个保存的图像:

 func urlRequestWithComponents(urlString:String, parameters:Dictionary<String, String>, imageData:NSData) -> (URLRequestConvertible, NSData) { // create url request to send var mutableURLRequest = NSMutableURLRequest(URL: NSURL(string: urlString)!) mutableURLRequest.HTTPMethod = Alamofire.Method.POST.rawValue let boundaryConstant = "myRandomBoundary12345"; let contentType = "multipart/form-data;boundary="+boundaryConstant mutableURLRequest.setValue(contentType, forHTTPHeaderField: "Content-Type") // create upload data to send let uploadData = NSMutableData() // add image uploadData.appendData("\r\n--\(boundaryConstant)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) uploadData.appendData("Content-Disposition: form-data; name=\"file\"; filename=\"file.png\"\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) uploadData.appendData("Content-Type: image/png\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) uploadData.appendData(imageData) // add parameters for (key, value) in parameters { uploadData.appendData("\r\n--\(boundaryConstant)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) uploadData.appendData("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n\(value)".dataUsingEncoding(NSUTF8StringEncoding)!) } uploadData.appendData("\r\n--\(boundaryConstant)--\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) // return URLRequestConvertible and NSData return (Alamofire.ParameterEncoding.URL.encode(mutableURLRequest, parameters: nil).0, uploadData) } 

当我从图库中select图像并将其放置在屏幕上的imageView中时,我的networking服务正在工作。 但是当我拍照的时候,我需要先将它保存到图库中,但是我缺less的是如何从程序库中引用这个新创build的照片。

更新:我假设从nsurl到nsdata的转换将在下面的相机块检索如下。 注意当用户select拍照选项时,cameraBool设置为true。 ImageChanged在imagePickerController函数中设置

 if (imageChanged){ //changed from placeholder if (!cameraBool){ //retrieved from gallery let image = pic let imageData = UIImagePNGRepresentation(image) } else{ //retrieved from camera let imageData = NSData(contentsOfURL: cameraPath) } } else{ //upload nil let imageData = nil } 

我的问题是,图像的path只在我的imagePickerController函数中定义。 所以我需要在文件的顶部声明cameraPath,以便它可以在imagePickerController函数中使用,然后在我的上传webservice中使用。 看来我无法将cameraPath初始化为零。 所以我不知道如何初始化它?

 var cameraPath : NSURL = nil //not allowed 

当我刚刚有:

 var cameraPath : NSURL 

我收到错误,我的控制器没有初始化程序

您可以通过摄像头获得最近添加的图像的path:

 func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) { imagePicked.image = image if (cameraBool){ var imageData = UIImageJPEGRepresentation(imagePicked.image, 0.6) var compressedJPGImage = UIImage(data: imageData) ALAssetsLibrary().writeImageToSavedPhotosAlbum(compressedJPGImage!.CGImage, orientation: ALAssetOrientation(rawValue: compressedJPGImage!.imageOrientation.rawValue)!, completionBlock:{ (path:NSURL!, error:NSError!) -> Void in println("\(path)") //Here you will get your path }) } self.dismissViewControllerAnimated(true, completion: nil); } 

这将打印这样的path:

 assets-library://asset/asset.JPG?id=C5E0EB97-5D3D-41F9-8782-F48140144432&ext=JPG 

使用ALAssetsLibrary,如果使用UIImageWriteToSavedPhotosAlbum保存图像,则不会获得指向它的指针。 更多信息 。

编辑:我认为@DharmeshKheni的解决scheme应该工作。 我的猜测是你在读取cameraPath之前设置。 换句话说:我想你会在保存之前尝试使用新的图片。 你能告诉cameraPath的设置在哪里?

你可以使用协议/委托模式。 请参阅Apple文档 。

基本上,你需要在你的类中创build一个Protocol,并设置一个委托variables,然后把你的Image交给新的View Controller。 你可以在这里find一个教程。