"Создание формата изображения с неизвестным типом - ошибка" с помощью 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 или есть ли другой способ сделать это.
Ответы
Ответ 1
Ниже упомянутый код действительно решил проблему для меня -
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)
}
Ответ 2
Не забудьте добавить делегат к себе
let picker = UIImagePickerController()
picker.delegate = self // delegate added
Ответ 3
Ниже код устранил проблему:
Если пользователь выполняет изменения выбранного изображения, вытащите только это изображение, в противном случае вытащите исходный источник изображения без каких-либо изменений и, наконец, отверните контроллер представления изображения.
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)
}
Ответ 4
Если вы разрешаете редактирование изображения 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
}
}
Ответ 5
принятое решение от Jeetendra Choudhary работает. Хотя в Xcode 8 с Swift 3 я заметил, что он генерирует предупреждение:
Instance method 'imagePickerController(_:didFinishPickingMediaWithInfo:)' nearly matches optional requirement 'imagePickerController(_:didFinishPickingMediaWithInfo:)' of protocol 'UIImagePickerControllerDelegate'
![введите описание изображения здесь]()
и предлагает добавить либо @nonobjc, либо личное ключевое слово, чтобы отключить предупреждение. Если вы отключите предупреждение, используя эти предложения, решение больше не работает.
Ответ 6
Я нашел, что изображения по умолчанию в библиотеке фотографий могут решить эту проблему.
Если вы перетащите изображение со своего компаньона на симулятор и выберите его.
эта проблема решена.
Ответ 7
По словам Абдурохмана, я меняю свой код и решу проблему, спасибо.
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)
}
Ответ 8
Добавьте это для просмотраDidload()
imagepicker.delegate = self
Ответ 9
Добавьте "_" в параметры функции.
от
func imagePickerController(picker: UIImagePickerController ...
к
func imagePickerController(_ picker: UIImagePickerController ...
Ответ 10
Это сработало для меня:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
imageView.image = image
self.dismiss(animated: true, completion: nil)
}
}
Ответ 11
Если это помогает кому-либо, я это имел место, когда я подклассифицировал UIImageView для создания округленного представления. Это также произошло, когда я добавил следующую строку в viewDidLoad()
imageView.layer.cornerRadius = self.imageView.frame.size.width / 2
В итоге я добавил строку в viewWillLayoutSubViews, и она сработала. См. Это для более подробной информации:
clipsToBounds заставляет UIImage не отображаться в iOS10 и XCode 8
Ответ 12
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
let image = info[UIImagePickerControllerOriginalImage] as? UIImage
self.dismiss(animated: true, completion: nil)
self.imageTook.image = image
}
Ответ 13
Измените didFinishPickingMediaWithInfo info: [String : AnyObject]
,
до didFinishPickingMediaWithInfo info: [String : Any]
Ответ 14
Для Xcode 8.1 с быстрым 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)
}
}
Теперь изображение добавляется в представление изображения из библиотеки
Ответ 15
Я думаю, что вам не хватает связи между photoImageView и изображением.
Посмотрите мои скриншоты ниже:
![введите описание изображения здесь]()
![введите описание изображения здесь]()
Удачи!
Ответ 16
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)
}
Ответ 17
Обязательно включите делегат UINavigationControllerDelegate
. Это решило проблему для меня.
Ответ 18
попробуйте ниже
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
}
Ответ 19
Это сработало для меня.
Просто скопируйте и вставьте его точно.
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)
}
Ответ 20
Что я сделал, так это то, что как только я получил изображение из 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.
Ответ 21
Я думаю, что вам не хватает связи между photoImageView и изображением.
Посмотрите мои скриншоты ниже:
![введите описание изображения здесь]()
![введите описание изображения здесь]()
Ответ 22
//подборщик изображений с представлением коллекции
класс 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
}