【问题标题】: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 扩展的函数内

标签: ios swift image-processing uiimageview uikit


【解决方案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,这将使用屏幕分辨率。
    • 好的,先生,我正在学习作为一名初级开发人员,我实现了上面的代码来获取高分辨率屏幕截图,我会根据你的建议改变我的功能:) 谢谢
    猜你喜欢
    • 2013-08-17
    • 1970-01-01
    • 2019-08-23
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 2010-11-12
    相关资源
    最近更新 更多