缩放视图&使用UIGraphicsBeginImageContextWithOptions的图像

时间:2016-06-15 20:40:25

标签: ios swift image crop

我正在寻找一种解决方案,将保存为图像的UIView(及其子视图)保存到设备照片库。我希望输出图像的大小为1024 x 1024.UIView将始终是一个正方形,因此子视图将适合广场。结果保存的输出必须满足这些需求。

这就是我所拥有的:

let outputSize = CGSize(width: 1024.0, height: 1024.0)

func imageWithView(view: UIView) -> UIImage {
    UIGraphicsBeginImageContextWithOptions(outputSize, view.opaque, 0.0)
    view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: false)
    let outputImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return outputImage
}

我传递给上面参数的视图是方形视图。下面的截图是结果:

crop scale is off

在我的故事板中,UIView是280x280的正方形(如果这有所不同。)我想要的结果是UIView(及其内部的照片)被保存为黑色框架的全尺寸(1024平方)。谢谢你的帮助。

修改

这是更新版本: 虽然它满足了在1024平方输出视图的需要,但质量不是很理想。想使用CGBitmapContextCreate&这里讨论的CGContextDrawImage方法:http://nshipster.com/image-resizing/

func stackOverflow() -> UIImage{

    let hasAlpha = false
    let scale: CGFloat = 1.0

    UIGraphicsBeginImageContextWithOptions(CGSizeMake(1024.0, 1024.0), !hasAlpha, scale)

    mainView.drawViewHierarchyInRect(CGRect(origin: CGPointZero, size: CGSizeMake(1024.0, 1024.0)), afterScreenUpdates:  false)

    let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return scaledImage
}

1 个答案:

答案 0 :(得分:0)

你可以这样做:

let image = UIImage(contentsOfFile: self.URL.absoluteString!)

let size = CGSizeApplyAffineTransform(image.size, CGAffineTransformMakeScale(0.5, 0.5))
let hasAlpha = false
let scale: CGFloat = 0.0 // Automatically use scale factor of main screen

UIGraphicsBeginImageContextWithOptions(size, !hasAlpha, scale)
image.drawInRect(CGRect(origin: CGPointZero, size: size))

let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

如图所示here