我正在寻找一种解决方案,将保存为图像的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
}
我传递给上面参数的视图是方形视图。下面的截图是结果:
在我的故事板中,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
}
答案 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。