将图像视图转换为图像时质量会降低

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,这将使用屏幕分辨率。 好的,先生,我正在学习作为一名初级开发人员,我实现了上面的代码来获取高分辨率屏幕截图,我会根据你的建议改变我的功能:) 谢谢

以上是关于将图像视图转换为图像时质量会降低的主要内容,如果未能解决你的问题,请参考以下文章

快速转换后保持相同的图像质量

缩放图像并在图像视图中设置会降低图像质量并挤压它

使用 evo pdf 转换 word 文档时图像质量差

MMX SSE 到 C 代码转换时图像质量下降

Ghostscript:将 EPS 转换为 PNG 时,有时质量会失败

将 UIImage 转换为灰度保持图像质量