it-swarm.com.ru

"Создание формата изображения с неизвестным типом - ошибка" с UIImagePickerController

При выборе изображения из средства выбора изображений в iOS 10 Swift 3 появляется сообщение об ошибке - 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)
}

Изображение не выбирается и не обновляется. Мне нужна помощь или предложение, чтобы узнать, был ли изменен синтаксис или что-либо относительно этого метода в iOS10 или Swift 3 или есть какой-либо другой способ сделать это.

76
Jeet

Приведенный ниже код решил проблему для меня - 

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)
}
28
Jeet

Не забудьте добавить делегата к себе

let picker = UIImagePickerController()
picker.delegate = self // delegate added
11
Roberto Gutierrez

Ниже код действительно решил проблему: 

Если пользователь вносит изменения в выбранное изображение, извлекайте только это изображение, в противном случае извлекайте исходный источник изображения без каких-либо изменений и, наконец, отклоняйте контроллер представления средства выбора изображения. 

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)
}
10
keerthi chinivar

Если вы разрешите редактирование изображения imageController.allowsEditing = true, то сначала вам нужно будет получить отредактированное изображение:

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
    }
}
7
oyalhi

Я обнаружил, что изображения по умолчанию в библиотеке фотографий могут вызвать эту проблему . Если вы перетащите изображение со своего компьютера на симулятор и выберите его ........ эта проблема решена

5
changmeng chen

принятое решение by Jeetendra Choudhary работает. Хотя в Xcode 8 со Swift 3 я заметил, что оно генерирует предупреждение: Instance method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' nearly matches optional requirement 'imagePickerController(_:didFinishPickingMediaWithInfo:)' of protocol 'UIImagePickerControllerDelegate'

 enter image description here

и предлагает добавить ключевое слово @nonobjc или private, чтобы отключить предупреждение. Если вы отключите предупреждение с помощью этих предложений, решение больше не будет работать.

5
Ashildr

Согласно ответу Абдуромана, я изменяю свой код и решаю проблему, спасибо.

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)
}
3
edenPan

Добавьте это к viewDidload ()

imagepicker.delegate = self
2
Ali Adil

Я думаю, что вам не хватает связи между photoImageView и изображением.

Посмотрите мои скриншоты ниже:

 enter image description here

 enter image description here

1
My Mai

Это сработало для меня:

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

Я думаю, что вам не хватает связи между photoImageView и изображением.

Посмотрите мои скриншоты ниже:

 enter image description here

 enter image description here

Удачи!

1
My Mai

Изменить didFinishPickingMediaWithInfo info: [String : AnyObject], в didFinishPickingMediaWithInfo info: [String : Any]

1
evan
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)

}
1
DMP_2016
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

         let image = info[UIImagePickerControllerOriginalImage] as? UIImage
        self.dismiss(animated: true, completion: nil)
        self.imageTook.image = image
    }
1
Ramanaraynan

Для Xcode 8.1 с Swift 3, после изменения метода делегата, как показано ниже

Правка свой 

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) {

    imagePost.image = image
    self.dismiss(animated: true, completion: nil)
}

функция к

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])

    {


imagePost.image = info[UIImagePickerControllerOriginalImage] as? UIImage
 picker.dismiss(animated: true, completion: nil)

}

Я забыл добавить UINavigationControllerDelegate вместе с UIImagePickerControllerDelegate в 

class ViewController:UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate

Вы бы добавили переменную в начале, как 

var imagePicker = UIImagePickerController ()

и установка делегата и вызов функции в viewdidload () как

 imagePicker.delegate = self
 viwImagePick()

Затем объясните эту функцию как 

  //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)


        }
    }

Теперь изображение добавляется в вид изображения из библиотеки.

1
Dinesh Kumar

Добавьте «_» в параметры функции.

от

func imagePickerController(picker: UIImagePickerController ...

в

func imagePickerController(_ picker: UIImagePickerController ...
1
Woongbi Kim

Если это кому-нибудь поможет, у меня это произошло, когда я создал подкласс UIImageView для создания округленного представления. Это также произошло, когда я добавил нижнюю строку в viewDidLoad ()

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

В итоге я добавил строку в viewWillLayoutSubViews, и это сработало. Смотрите это для более подробной информации:

clipsToBounds заставляет UIImage не отображаться в iOS10 и XCode 8

1
crims345

Это сработало для меня. Просто скопируйте и вставьте его точно. 

    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)
}
0
thepiranha

// средство выбора изображений с представлением коллекции class 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



}
0
hiren

Не забудьте также включить делегата UINavigationControllerDelegate. Это решило проблему для меня.

0
Jordi Bruin

попробуйте ниже

    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
}
0
mzonerz

Что я сделал, так это то, что как только я получил изображение от didFinishPickingMediaWithInfo, я позвонил:

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
}

сохранить его в формате NSData. 

Консоль все еще предупреждала меня о «[Generic] Создание формата изображения с неизвестным типом - ошибка», но по крайней мере мой imageView обновляется до выбранного изображения, а не показывает предыдущее из viewDidLoad.

0
Jackson Gan