如何从UIView中获取高分辨率的图像?

问题描述 投票:0回答:2

希望你们都能平安。

我知道这个问题问了几次,但没有得到一个完美的答案。

我只是想从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中创建高分辨率的图像。当我放大图像的一个部分时,文字是模糊的。

请检查以下图片

enter image description here

ios swift image resolution swift5
2个回答
0
投票
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)

0
投票
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
    }
}

或者,也许你可以缩放你的视图(或视图的临时副本),然后采取截图。


0
投票
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。

© www.soinside.com 2019 - 2024. All rights reserved.