Resize UIImage to 200x200pt/px Resize UIImage to 200x200pt/px swift swift

Resize UIImage to 200x200pt/px


Here is my code. The Image is in width 850 px and not 200 px:

 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}@IBAction func chooseImage(sender: AnyObject) {    var myPickerController = UIImagePickerController()    myPickerController.sourceType = UIImagePickerControllerSourceType.PhotoLibrary    myPickerController.delegate = self;    self.presentViewController(myPickerController, animated: true, completion: nil)}func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]){    var imagenow = info[UIImagePickerControllerOriginalImage] as? UIImage    imageImage.image = resizeImage(imagenow!, newWidth: 200)    pimg2 = imageImage.image!    cidnew2 = textFieldCID!.text!    pname2 = textFieldName!.text    pmanu2 = textFieldMan!.text    pnick2 = textFieldNick!.text    podate2 = textFieldPODate!.text    pno2 = textFieldArtNo!.text    self.dismissViewControllerAnimated(true, completion: nil)}


Based on swift_dan's answer, an update for Swift 3

func resizeImage(image: UIImage, newWidth: CGFloat) -> UIImage? {    let scale = newWidth / image.size.width    let newHeight = image.size.height * scale    UIGraphicsBeginImageContext(CGSize(width: newWidth, height: newHeight))    image.draw(in: CGRect(x: 0, y: 0, width: newWidth, height: newHeight))    let newImage = UIGraphicsGetImageFromCurrentImageContext()    UIGraphicsEndImageContext()    return newImage}


If you're dealing with PNG images that contain transparencies, then the accepted answer function will actually convert the transparent areas to black.

If you wish to scale and keep the transparencies in place, try this function:

SWIFT 4

extension UIImage {    func scaleImage(toSize newSize: CGSize) -> UIImage? {        var newImage: UIImage?        let newRect = CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height).integral        UIGraphicsBeginImageContextWithOptions(newSize, false, 0)        if let context = UIGraphicsGetCurrentContext(), let cgImage = self.cgImage {            context.interpolationQuality = .high            let flipVertical = CGAffineTransform(a: 1, b: 0, c: 0, d: -1, tx: 0, ty: newSize.height)            context.concatenate(flipVertical)            context.draw(cgImage, in: newRect)            if let img = context.makeImage() {                newImage = UIImage(cgImage: img)            }            UIGraphicsEndImageContext()        }        return newImage    }}