如何将 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)
UIVideoEditorController 丢失视频分辨率