SWIFT 3 示例
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let imageView = UIImageView(frame: CGRect(x: CGFloat(0), y: CGFloat(50), width: CGFloat(320), height: CGFloat(320)))
view.addSubview(imageView)
let image = UIImage(named: "Dubai-Photos-Images-Travel-Tourist-Images-Pictures-800x600.jpg")
imageView.image = circularScaleAndCropImage(UIImage(named: "Dubai-Photos-Images-Travel-Tourist-Images-Pictures-800x600.jpg")!, frame: CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(100), height: CGFloat(100)))
}
最后,执行繁重的 circularScaleAndCropImage 的功能如下所述
func circularScaleAndCropImage(_ image: UIImage, frame: CGRect) -> UIImage{
// This function returns a newImage, based on image, that has been:
// - scaled to fit in (CGRect) rect
// - and cropped within a circle of radius: rectWidth/2
//Create the bitmap graphics context
UIGraphicsBeginImageContextWithOptions(CGSize(width: CGFloat(frame.size.width), height: CGFloat(frame.size.height)), false, 0.0)
let context: CGContext? = UIGraphicsGetCurrentContext()
//Get the width and heights
let imageWidth: CGFloat = image.size.width
let imageHeight: CGFloat = image.size.height
let rectWidth: CGFloat = frame.size.width
let rectHeight: CGFloat = frame.size.height
//Calculate the scale factor
let scaleFactorX: CGFloat = rectWidth / imageWidth
let scaleFactorY: CGFloat = rectHeight / imageHeight
//Calculate the centre of the circle
let imageCentreX: CGFloat = rectWidth / 2
let imageCentreY: CGFloat = rectHeight / 2
// Create and CLIP to a CIRCULAR Path
// (This could be replaced with any closed path if you want a different shaped clip)
let radius: CGFloat = rectWidth / 2
context?.beginPath()
context?.addArc(center: CGPoint(x: imageCentreX, y: imageCentreY), radius: radius, startAngle: CGFloat(0), endAngle: CGFloat(2 * Float.pi), clockwise: false)
context?.closePath()
context?.clip()
//Set the SCALE factor for the graphics context
//All future draw calls will be scaled by this factor
context?.scaleBy(x: scaleFactorX, y: scaleFactorY)
// Draw the IMAGE
let myRect = CGRect(x: CGFloat(0), y: CGFloat(0), width: imageWidth, height: imageHeight)
image.draw(in: myRect)
let newImage: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage!
}