首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换base64时图像质量下降

转换base64时图像质量下降
EN

Stack Overflow用户
提问于 2019-05-30 16:54:15
回答 2查看 233关注 0票数 0

我有一个pdf,我正在将pdf转换成图像并显示在UIImageView中,然后在我将该图像转换为base64之后,但当我转换到base64时,我失去了图像质量,所以有什么方法可以防止在转换到base64时失去质量吗?

请告诉我有什么解决办法吗?

下面是我的转换代码

代码语言:javascript
复制
let previewImage1 = convertedImageView.getImage()
let btnImg = UIButton()
btnImg.setImage(previewImage1, for: .normal)
let btn1Imggg2 = btnImg.image(for: .normal)
let imageData2 = btnImg?.jpegData(compressionQuality: 0.0)
let imgString2 = imageData2!.base64EncodedString(options: .init(rawValue: 0))

即使我将压缩质量设置为0.0,它的压缩图像也是静止的

我有UIView里面,我有ScrollView里面,我有ImageView,我正在将整个UIView转换为图像,然后转换为base64,这是方案,希望这能帮助你理解

UIViewUIImage的代码

代码语言:javascript
复制
 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
    }
EN

回答 2

Stack Overflow用户

发布于 2019-05-30 17:17:49

通过这样做

代码语言:javascript
复制
   let imageData2 = btnImg?.jpegData(compressionQuality: 0.0)

您正在使用可能的最大值压缩图像。将此代码更改为

代码语言:javascript
复制
   let imageData2 = btnImg?.jpegData(compressionQuality: 1.0)

你就可以走了。

当您将UIView转换为UIImage时,下面的函数可能对您很有用:

代码语言:javascript
复制
func image(with view: UIView) -> UIImage? {
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.isOpaque, 0.0)
    defer { UIGraphicsEndImageContext() }
    if let context = UIGraphicsGetCurrentContext() {
        view.layer.render(in: context)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        return image
    }
    return nil
}

如果jpeg数据不能满足您的需求,则用户pngData如下所示

代码语言:javascript
复制
let imageData2 = btnImg?.pngData()

转换为图像后,应用base64转换,就像您现在所做的那样。

票数 4
EN

Stack Overflow用户

发布于 2019-05-30 17:51:45

好的,由于您有一个嵌套的层次结构(UIView -> UIScrollView -> UIImageView),并且您不想将整个层次结构捕获为图像,因此最好从UIView (层次结构中的最高层,除非我理解错误,您不想只使用UIImageView部分)创建图像。

代码语言:javascript
复制
let parentMostView = (the view you want to create into an image)

UIGraphicsBeginImageContextWithOptions(size: parentMostView.frame.size, NO, UIScreen.main.scale)

let image = UIGraphicsGetImageFromCurrentImageContext()!
UIGrapgicsEndImageContext()
let imageAsData = image.pngData()
//do your base64 conversion here

编辑:在看到您的镜像创建代码时

我在您的getImage(:)方法中没有看到任何问题。您在哪种设备上测试(较低比例的设备会产生低分辨率图像,因为您依赖于设备比例)?尝试使用较高的静态比例值(例如10),并将数据转换为.jpegData(compressionQuality: 1.0).pngData()

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56374850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档