将图像视图转换为图像时质量会降低
Posted
技术标签:
【中文标题】将图像视图转换为图像时质量会降低【英文标题】:Quality get reduced when convert imageview to image 【发布时间】:2021-11-25 13:11:38 【问题描述】:在照片编辑器屏幕中,我有 imageview,它有背景图像,在 imageview 顶部我添加了文本(标签)、贴纸(图像)等元素,现在对于包含添加到 imageview 上的所有元素的最终图像,我我正在从下面的代码中获取图像
clipRect 是 imageview 中背景图像的矩形,图像是 imageview 中的 aspectfit
下面是 UIView 扩展中的代码,它具有生成视图之外的图像的功能。
self == uiview
let op_format = UIGraphicsImageRendererFormat()
op_format.scale = 1.0
let renderer = UIGraphicsImageRenderer(bounds: CGRect(origin: clipRect!.origin, size: outputSize), format: op_format)
let originalBound = self.bounds
self.bounds = CGRect(origin: clipRect!.origin, size: clipRect!.size)
var finalImage = renderer.image ctx in
self.drawHierarchy(in: CGRect(origin: self.bounds.origin, size: outputSize), afterScreenUpdates: true)
self.bounds = CGRect(origin: originalBound.origin, size: originalBound.size)
这里的问题是最终图像质量与原始背景图像相比非常差。
【问题讨论】:
这里的问题是不存在UIImgeView
对象,无论标题是什么。
@ElTomato 为了更清楚添加细节,代码在 uiview 扩展的函数内
【参考方案1】:
不要将 UIGraphicsImageRendererFormat
的比例设置为 1。这会强制输出图像为 @1x(非视网膜)。对于大多数(所有?)ios 设备,这将导致分辨率降低 2 倍或 3 倍。将 UIGraphicsImageRendererFormat 的比例值保留为默认值。
【讨论】:
【参考方案2】:你也可以截图
// Convert a uiview to uiimage
func captureView() -> UIImage
// Gradually increase the number for high resolution.
let scale = 1.0
UIGraphicsBeginImageContextWithOptions(bounds.size, opaque, scale)
layer.renderInContext(UIGraphicsGetCurrentContext()!)
let image:UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
【讨论】:
UIGraphicsBeginImageContextWithOptions 正在逐步淘汰。您应该改用 UIGraphicsImageRenderer。并且评论“逐渐增加高分辨率的数量”是无稽之谈。在大多数情况下,您应该将值设置为 0,这将使用屏幕分辨率。 好的,先生,我正在学习作为一名初级开发人员,我实现了上面的代码来获取高分辨率屏幕截图,我会根据你的建议改变我的功能:) 谢谢以上是关于将图像视图转换为图像时质量会降低的主要内容,如果未能解决你的问题,请参考以下文章