gpt4 book ai didi

ios - 使用 UIGraphicsBeginImageContextWithOptions 缩放 View 和图像

转载 作者:行者123 更新时间:2023-11-30 13:20:11 32 4
gpt4 key购买 nike

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

这是我所拥有的:

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
}

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

crop scale is off

在我的 Storyboard中,UIView 是 280x280 的正方形(如果这有区别的话)。我想要的结果是 UIView(以及其中的照片)保存为黑框的完整大小(即 1024 平方)。感谢您的帮助。

编辑

这是一个更新版本:虽然可以满足输出1024平方 View 的需求,但质量不太理想。想要使用此处讨论的 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
}

最佳答案

你可以这样做:

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 .

关于ios - 使用 UIGraphicsBeginImageContextWithOptions 缩放 View 和图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37845363/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com