son que para mejor las jpg fotos formato cual cambiar app ios swift xcode uiimageview xcode8

ios - que - "Crear un formato de imagen con un tipo desconocido es un error" con UIImagePickerController



png o jpg para fotos (23)

// selector de imágenes con la clase de vista de colección ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UICollectionViewDataSource, UICollectionViewDelegate {

@IBOutlet var img: UIImageView! @IBOutlet weak var collview: UICollectionView! var image = NSMutableArray() let imgpkr = UIImagePickerController() override func viewDidLoad() { super.viewDidLoad() imgpkr.delegate = self } @IBAction func btnselect(_ sender: UIButton) { imgpkr.allowsEditing = true // false imgpkr.sourceType = .photoLibrary imgpkr.mediaTypes = UIImagePickerController.availableMediaTypes(for: .photoLibrary)! present(imgpkr, animated: true, completion: nil) } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { let choose = info[UIImagePickerControllerOriginalImage]as!UIImage let edit = info[UIImagePickerControllerEditedImage]as!UIImage img.contentMode = .scaleAspectFit img.image = edit //MARK:- Add image in collview image.add(edit) collview.reloadData() dismiss(animated: true, completion: nil) } func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { dismiss(animated: true, completion: nil) } //MARK:- Collection View func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return image.count } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collview.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)as! CollectionViewCell1 cell.img1.image = image.object(at: indexPath.item)as! UIImage return cell }

Al elegir una imagen del selector de imágenes en iOS 10 Swift 3 recibo un error: Creating an image format with an unknown type is an error

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) { imagePost.image = image self.dismiss(animated: true, completion: nil) }

La imagen no se está seleccionando y actualizando. Necesito ayuda o sugerencia para saber si la sintaxis o algo relacionado con este método ha cambiado en iOS10 o Swift 3 o si hay alguna otra forma de hacerlo.


Agregue "_" en los parámetros de la función.

desde

func imagePickerController(picker: UIImagePickerController ...

a

func imagePickerController(_ picker: UIImagePickerController ...


Agregue esto para verDidload ()

imagepicker.delegate = self


Asegúrese de incluir también el delegado UINavigationControllerDelegate . Esto resolvió el problema para mí.


Cambie la didFinishPickingMediaWithInfo info: [String : AnyObject] , a didFinishPickingMediaWithInfo info: [String : Any]


Creo que te falta una conexión entre photoImageView y la imagen.

Echa un vistazo a mis capturas de pantalla a continuación:


Creo que te falta una conexión entre photoImageView y la imagen.

Echa un vistazo a mis capturas de pantalla a continuación:

¡Buena suerte!


El código mencionado a continuación resolvió el problema para mí:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { imagePost.image = image } else{ print("Something went wrong") } self.dismiss(animated: true, completion: nil) }


El siguiente código resolvió el problema:

Si el usuario realiza cambios en la imagen seleccionada, extraiga solo esa imagen; de lo contrario, extraiga la fuente de imagen original sin ningún cambio y finalmente descarte el controlador de vista del selector de imágenes.

public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]){ if let image = info[UIImagePickerControllerEditedImage] as? UIImage { imageView.image = image } else if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { imageView.image = image } else{ print("Something went wrong") } self.dismiss(animated: true, completion: nil) }


Encontré que las imágenes predeterminadas en la biblioteca de fotos podrían causar este problema. Si arrastra una imagen de su computadora al simulador y la elige. este problema está resuelto


Esto funcionó para mí. Simplemente cópielo y péguelo exactamente.

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { // The info dictionary contains multiple representations of the image, and this uses the original. let selectedImage = info[UIImagePickerControllerOriginalImage] as! UIImage // Set photoImageView to display the selected image. photoImageView.image = selectedImage // Dismiss the picker. dismiss(animated: true, completion: nil) }


Esto funcionó para mí:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { imageView.image = image self.dismiss(animated: true, completion: nil) } }


La solución aceptada por Jeetendra Choudhary funciona. Aunque en Xcode 8 con Swift 3, noté que genera una advertencia: el Instance method ''imagePickerController(_:didFinishPickingMediaWithInfo:)'' nearly matches optional requirement ''imagePickerController(_:didFinishPickingMediaWithInfo:)'' of protocol ''UIImagePickerControllerDelegate''

y sugiere agregar @nonobjc o una palabra clave privada para silenciar la advertencia. Si silencia la advertencia utilizando estas sugerencias, la solución ya no funcionará.


Lo que hice fue que una vez que obtuve la imagen de didFinishPickingMediaWithInfo, llamé:

func prepareImageForSaving(image:UIImage) { // create NSData from UIImage guard let imageData = UIImageJPEGRepresentation(image, 1) else { // handle failed conversion print("jpg error") return } self.saveImage(imageData: imageData as NSData) } func saveImage(imageData: NSData) { imageDatas = imageData }

para guardarlo en formato NSData.

La consola todavía me advirtió sobre "[Genérico] Crear un formato de imagen con un tipo desconocido es un error" pero al menos mi imageView se actualiza a la imagen seleccionada en lugar de mostrar la anterior desde viewDidLoad.


Para Xcode 8.1 con swift 3, después de cambiar el método de delegado como se muestra a continuación

cambia tu

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) { imagePost.image = image self.dismiss(animated: true, completion: nil) }

funcionar para

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { imagePost.image = info[UIImagePickerControllerOriginalImage] as? UIImage picker.dismiss(animated: true, completion: nil) }

Olvidé agregar UINavigationControllerDelegate junto con UIImagePickerControllerDelegate en

class ViewController:UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate

Habría agregado una variable al principio como

var imagePicker = UIImagePickerController ()

y establecer delegado y llamar a una función en viewdidload () como

imagePicker.delegate = self viwImagePick()

Luego explique esa función como

//ImagePicker func viwImagePick(){ let alert = UIAlertController(title: nil, message: "Choose your source", preferredStyle: UIAlertControllerStyle.alert) alert.addAction(UIAlertAction(title: "Camera", style: UIAlertActionStyle.default) { (result : UIAlertAction) -> Void in print("Camera selected") self.openCamera() //Code for Camera //cameraf }) alert.addAction(UIAlertAction(title: "Photo library", style: UIAlertActionStyle.default) { (result : UIAlertAction) -> Void in print("Photo selected") self.openGallary() //Code for Photo library //photolibaryss }) self.present(alert, animated: true, completion: nil) } func openCamera() { imagePicker.sourceType = UIImagePickerControllerSourceType.camera if UIDevice.current.userInterfaceIdiom == .phone { self.present(imagePicker, animated: true, completion: nil) } else { let popover = UIPopoverController(contentViewController: imagePicker) popover.present(from: profileImgViw.frame, in: self.view, permittedArrowDirections: UIPopoverArrowDirection.any, animated: true) } } func openGallary() { imagePicker.sourceType = UIImagePickerControllerSourceType.savedPhotosAlbum if UIDevice.current.userInterfaceIdiom == .phone { self.present(imagePicker, animated: true, completion: nil) } else { let popover = UIPopoverController(contentViewController: imagePicker) popover.present(from: profileImgViw.frame, in: self.view, permittedArrowDirections: UIPopoverArrowDirection.any, animated: true) } }

Ahora la imagen se agrega a la vista de imagen desde la biblioteca


Para mí recibía el error:

"error fatal: inesperadamente encontrado nulo ..."

cuando selecciona imagein imagepicker.

Para solucionar el problema, volví a crear la salida para imageView .


Recuerde agregar delegado a sí mismo

let picker = UIImagePickerController() picker.delegate = self // delegate added


Según la respuesta de Abdurohman, cambio mi código y resuelvo el problema, gracias.

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { let selectedImage = info[UIImagePickerControllerOriginalImage] as! UIImage photoImageView.image = selectedImage // Dismiss the picker. dismiss(animated: true, completion: nil) }


Si esto ayuda a alguien, esto sucedió cuando subclasifiqué UIImageView para crear una vista redondeada. También sucedió cuando agregué la siguiente línea en viewDidLoad ()

imageView.layer.cornerRadius = self.imageView.frame.size.width / 2

Terminé agregando la línea en viewWillLayoutSubViews y funcionó. Vea esto para más detalles:

clipsToBounds hace que UIImage no se muestre en iOS10 y XCode 8


Si permite la edición de la imagen imageController.allowsEditing = true deberá obtener la imagen editada:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { picker.dismissViewControllerAnimated(true, completion: nil) if let image = info[UIImagePickerControllerEditedImage] as? UIImage { imagePost.image = image } else if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { imagePost.image = image } else { imagePost.image = nil } }


prueba a continuación

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { print("image selected"); let selectedImage = info[UIImagePickerControllerOriginalImage] as! UIImag self.dismiss(animated: true, completion: nil) UIImg.image = selectedImage }


func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { let image = info[UIImagePickerControllerOriginalImage] as? UIImage self.dismiss(animated: true, completion: nil) self.imageTook.image = image }


func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { imgViewPhoto.image = image } else{ print("Something went wrong") } picker.dismiss(animated: true, completion: nil) }