Skip to content

Instantly share code, notes, and snippets.

@HamptonMakes
Created June 27, 2014 14:45
Show Gist options
  • Save HamptonMakes/180e81cd961573e3c54d to your computer and use it in GitHub Desktop.
Save HamptonMakes/180e81cd961573e3c54d to your computer and use it in GitHub Desktop.
Swift Image Resizer
//
// RBResizer.swift
// Locker
//
// Created by Hampton Catlin on 6/20/14.
// Copyright (c) 2014 rarebit. All rights reserved.
//
import UIKit
func RBSquareImageTo(image: UIImage, size: CGSize) -> UIImage {
return RBResizeImage(RBSquareImage(image), size)
}
func RBSquareImage(image: UIImage) -> UIImage {
var originalWidth = image.size.width
var originalHeight = image.size.height
var edge: CGFloat
if originalWidth > originalHeight {
edge = originalHeight
} else {
edge = originalWidth
}
var posX = (originalWidth - edge) / 2.0
var posY = (originalHeight - edge) / 2.0
var cropSquare = CGRectMake(posX, posY, edge, edge)
var imageRef = CGImageCreateWithImageInRect(image.CGImage, cropSquare);
return UIImage(CGImage: imageRef, scale: UIScreen.mainScreen().scale, orientation: image.imageOrientation)
}
func RBResizeImage(image: UIImage, targetSize: CGSize) -> UIImage {
let size = image.size
let widthRatio = targetSize.width / image.size.width
let heightRatio = targetSize.height / image.size.height
// Figure out what our orientation is, and use that to form the rectangle
var newSize: CGSize
if(widthRatio > heightRatio) {
newSize = CGSizeMake(size.width * heightRatio, size.height * heightRatio)
} else {
newSize = CGSizeMake(size.width * widthRatio, size.height * widthRatio)
}
// This is the rect that we've calculated out and this is what is actually used below
let rect = CGRectMake(0, 0, newSize.width, newSize.height)
// Actually do the resizing to the rect using the ImageContext stuff
UIGraphicsBeginImageContextWithOptions(newSize, false, 1.0)
image.drawInRect(rect)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
@sieder
Copy link

sieder commented Feb 20, 2015

This is so useful! thank you!

@willsteinmetz
Copy link

This is super helpful and saved me a lot of time. Thanks for sharing!

@lephukhanhhuy
Copy link

You should change this:
UIGraphicsBeginImageContextWithOptions(newSize, false, 1.0)

to this:
UIGraphicsBeginImageContextWithOptions(newSize, false, UIScreen.mainScreen().scale)

for the best quality on iPhone 6+

@AchSum
Copy link

AchSum commented May 27, 2015

Thank you ! :)

@RuliLG
Copy link

RuliLG commented Aug 6, 2015

Awesome! Thank you! 😄

@kourindouhime
Copy link

Thanks to the original author and thanks to @bashome for the fix. Really works now.

@iroller
Copy link

iroller commented Sep 6, 2015

@Jaime5366
Copy link

thanks for you help me!

@tcerven
Copy link

tcerven commented Nov 3, 2015

Thanks for posting this. Don't know why UIKit doesn't have a method for this.

@justinlevi
Copy link

Updated for use as a UIImage Extension
https://gist.github.com/justinlevi/ee037a4bb63598f6e56f

@FredRuniT
Copy link

How do I implement this into my app?

@billy84
Copy link

billy84 commented Sep 13, 2016

Very useful! Awesome!

@grafikri
Copy link

Thank you

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment