希望你们都能平安。
我知道这个问题问了几次,但没有得到一个完美的答案。
我只是想从UIView中捕获一个高分辨率的图像,主要是图像不应该是一个模糊的。
我已经尝试了这个代码
extension UIView {
func asImage() -> UIImage {
let renderer = UIGraphicsImageRenderer(size: self.bounds.size)
let capturedImage = renderer.image {
(ctx) in
self.drawHierarchy(in: self.bounds, afterScreenUpdates: true)
}
return capturedImage
}
}
现在,当我捕捉图像和缩放时,文字是模糊的。
先谢谢你
已编辑我试图从UIView中创建高分辨率的图像。当我放大图像的一个部分时,文字是模糊的。
请检查以下图片
extension UIImage {
convenience init(view: UIView) {
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.isOpaque, 0.0)
view.drawHierarchy(in: view.bounds, afterScreenUpdates: false)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
self.init(cgImage: (image?.cgImage)!)
}
}
使用。
let img = UIImage.init(view: self.yourView)
extension UIView {
func takeScreenshot() -> UIImage? {
var screenshotImage :UIImage?
let layer = self.layer
let scale = UIScreen.main.scale
UIGraphicsBeginImageContextWithOptions(layer.frame.size, false, scale)
self.drawHierarchy(in: layer.bounds, afterScreenUpdates: true)
screenshotImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return screenshotImage
}
}
或者,也许你可以缩放你的视图(或视图的临时副本),然后采取截图。
extension UIView {
func takeScreenshot() -> UIImage? {
var screenshotImage :UIImage?
let layer = self.layer
let scale = UIScreen.main.scale
UIGraphicsBeginImageContextWithOptions(layer.frame.size, false, scale)
self.drawHierarchy(in: layer.bounds, afterScreenUpdates: true)
screenshotImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return screenshotImage
}
}
这个答案就足够了,如果你想要一个更高的分辨率。只是多个 scale
到5或10。