Как изменить размер фотографии с помощью UIImagePicker/Swift

104
16

У меня возникла проблема с изменением размера фотографии после того, как камера быстро снимет фотографию. В настоящее время у меня есть Image View в моей сцене, которая составляет 100 x 100 (для фотографии профиля), но когда я запускаю приложение, фотография никогда не появляется после использования камеры. Вот мой код. Что мне не хватает:

@IBAction func employeePhotoButton(sender: AnyObject) {

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)

func resizeImage(image: UIImage, newWidth: CGFloat) -> UIImage {

let scale = newWidth / image.size.width
let newHeight = image.size.height * scale
UIGraphicsBeginImageContext(CGSizeMake(newWidth, newHeight))
image.drawInRect(CGRectMake(0, 0, newWidth, newHeight))
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

return newImage
}

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

employeePhoto.image = resizeImage(image!, newWidth: 100)

self.dismissViewControllerAnimated(true, completion: nil);
}

}
}

спросил(а) 2021-01-19T17:15:47+03:00 9 месяцев, 1 неделя назад
1
Решение
92

Попробуйте что-то вроде этого (обратите внимание, что это синтаксис Swift3):

// your IBAction could look something like this
@IBAction func employeePhotoButton(sender: AnyObject)
{
if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.Camera)
{
showImagePicker(.camera)
}
else
{
print("camera not available")
}
}

// your function in your view controller to display the image picker with whichever
// source type you want, check for source type availability before calling
func showImagePicker(sourceType:UIImagePickerControllerSourceType)
{
// instantiates and configures class var
self.imagePickerController = UIImagePickerController.init()
self.imagePickerController?.modalPresentationStyle = .currentContext
self.imagePickerController?.sourceType = sourceType
self.imagePickerController?.delegate = self
self.imagePickerController?.allowsEditing = false

// present controller
self.present(self.imagePickerController!, animated: true, completion: nil)
}

// Image picker delegate function
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any])
{
// dismiss the picker view controller
print("Selected media with info: \(info)")
self.dismiss(animated: true, completion: nil)

// no longer need this so nil out now
self.imagePickerController = nil

// check our image is valid
guard (info[UIImagePickerControllerOriginalImage] != nil) else {
print("No image found to load...")
return
}

// sets our 'selectedImg' class var for use elsewhere if needed
selectedImg = info[UIImagePickerControllerOriginalImage] as? UIImage

// verify the image is not nil
guard selectedImg != nil else {
print("selected image is nil")
return
}

// resize our selected image
let resizedImage = selectedImg.convert(toSize:CGSize(width:100.0, height:100.0), scale: UIScreen.main.scale)

// TODO: whatever you want to do with your resized image
employeePhoto.image = resizedImage
}

extension UIImage
{
// convenience function in UIImage extension to resize a given image
func convert(toSize size:CGSize, scale:CGFloat) ->UIImage
{
let imgRect = CGRect(origin: CGPoint(x:0.0, y:0.0), size: size)
UIGraphicsBeginImageContextWithOptions(size, false, scale)
self.draw(in: imgRect)
let copied = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

return copied!
}
}

ответил(а) 2021-01-19T17:15:47+03:00 9 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема