2016-03-19 1 views
0

Hier ist der Code, den ich schrieb, um ein Bild nach dem Zuschneiden zu skalieren. Ich stelle fest, dass ich ein CGImageRef neu anlege, um das beschnittene Bild zu verkleinern. Ich denke, es muss einen Weg geben, es zu optimieren. Also wie?Swift: Wie optimiere ich den Code, den ich geschrieben habe, um ein Bild nach dem Beschneiden zu skalieren?

let imgRef: CGImageRef = CGImageCreateWithImageInRect(img.CGImage, rect)! 
let croppedImg = UIImage(CGImage: imgRef, scale: 1, orientation: .Up) 

let imgSize = CGSize(width: Conf.Size.avatarSize.width, height: Conf.Size.avatarSize.width) 

UIGraphicsBeginImageContextWithOptions(imgSize, false, 1.0) 
croppedImg.drawInRect(CGRect(origin: CGPointZero, size: imgSize)) 
let savingImgContext = UIGraphicsGetCurrentContext() 
UIGraphicsEndImageContext() 

if let savingImgRef: CGImageRef = CGBitmapContextCreateImage(savingImgContext) { 
    let savingImg = UIImage(CGImage: savingImgRef, scale: 1, orientation: .Up) 
    UIImageWriteToSavedPhotosAlbum(savingImg, nil, nil, nil) 
} 

Antwort

0

Hier ist eine Funktion, die ich verwende, um Bilder zu skalieren. Hoffentlich ist es das, wonach Sie suchen.

func ResizeImage(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 orientation 
    var newSize: CGSize 
    if(widthRatio > heightRatio) { 
     newSize = CGSize(width: size.width * heightRatio, height: size.height * heightRatio) 
    } else { 
     newSize = CGSize(width: size.width * widthRatio, height: size.height * widthRatio) 
    } 

    let rect = CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height) 

    UIGraphicsBeginImageContextWithOptions(newSize, false, 1.0) 
    image.draw(in: rect) 
    let newImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    return newImage! 
}