У меня есть следующий код для фотографирования и сохранения его в фотопленку. Мне нужно иметь возможность использовать его тут же после сохранения, не возвращаясь в галерею и не выбирая его.
Я не нашел примеров того, как это сделать.
@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);
}
Мне нужно иметь возможность использовать это сохраненное изображение в следующей функции веб-сервиса:
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)
}
Мой веб-сервис работает, когда я выбираю изображение из галереи и помещаю его в свое изображение на экране. Но когда я делаю фотографию, мне нужно сначала сохранить ее в библиотеке, что я сейчас и сделал, но мне не хватает того, как программно сослаться на эту вновь созданную фотографию из библиотеки.
ОБНОВЛЕНИЕ: я предполагаю, что преобразование из nsurl в nsdata будет происходить так, как показано ниже в блоке, извлеченном из камеры ниже. Обратите внимание, что для 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
}
Моя проблема в том, что путь к изображению определяется только в моей функции imagePickerController. Поэтому мне нужно объявить cameraPath в верхней части файла, чтобы его можно было использовать в функции imagePickerController, а затем в моей веб-службе загрузки. Кажется, я не могу инициализировать cameraPath как ноль. Так что я не уверен, как его инициализировать?
var cameraPath : NSURL = nil
//not allowed
Когда у меня просто есть:
var cameraPath : NSURL
Я получаю сообщение об ошибке, что мой контроллер не имеет инициализаторов
var cameraPath : NSURL?
- person Dharmesh Kheni   schedule 17.06.2015