如何将 UIView 转换为高分辨率的 UIImage?

Posted

技术标签:

【中文标题】如何将 UIView 转换为高分辨率的 UIImage?【英文标题】:How to convert UIView to UIImage with high resolution? 【发布时间】:2017-06-13 01:57:34 【问题描述】:

关于如何使用view.drawHierarchy(in:)view.layer.renderInContext() 将UIView 转换为UIImage,已经进行了多次讨论。但是,即使将比例设置为设备比例,结果的分辨率仍然很差。我想知道是否有办法将 UIView 转换为具有高分辨率和质量的 UIImage?

【问题讨论】:

How to capture UIView to UIImage without loss of quality on retina display的可能重复 谢谢,不过还是用上面2个方法,结果还是不好:( 【参考方案1】:

您需要在每个子视图上设置正确的内容比例。

extension UIView    
    func scale(by scale: CGFloat) 
        self.contentScaleFactor = scale        
        for subview in self.subviews 
            subview.scale(by: scale)
        
    

    func getImage(scale: CGFloat? = nil) -> UIImage 
        let newScale = scale ?? UIScreen.main.scale
        self.scale(by: newScale)

        let format = UIGraphicsImageRendererFormat()
        format.scale = newScale

        let renderer = UIGraphicsImageRenderer(size: self.bounds.size, format: format)

        let image = renderer.image  rendererContext in            
            self.layer.render(in: rendererContext.cgContext)
        

        return image
    

创建图像:

let image = yourView.getImage()

【讨论】:

非常感谢详细的解释和使用! 我试过这个解决方案,但它不起作用?你是怎么做到的?

以上是关于如何将 UIView 转换为高分辨率的 UIImage?的主要内容,如果未能解决你的问题,请参考以下文章

将 UIImageView 和覆盖的 UIView 保存为图像(xcode/iOS)

iOS:UIImage 缩放以填充 UIView

如何将(编辑的)UIView 转换为 UIImage?

UIVideoEditorController 丢失视频分辨率

如何将 UITableViewCell 的内容视图转换为 Interface Builder 中的普通 UIView?

将 UIView 坐标转换为横向