转换base 64时会丢失图像质量

时间:2019-05-30 08:54:15

标签: ios swift uiimage tobase64string

Please Check i have atteche

我有一个pdf,我将pdf转换为图像并显示在UIImageView中,然后在将该图像转换为base 64之后,但是在转换base 64时却失去了图像质量,因此有什么方法可以防止在转换为base 64时降低质量

请告诉我有什么解决办法

这是我要转换的代码

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的代码

 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
    }

2 个答案:

答案 0 :(得分:4)

这样做

   let imageData2 = btnImg?.jpegData(compressionQuality: 0.0)

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

   let imageData2 = btnImg?.jpegData(compressionQuality: 1.0)

您会很高兴。

当您将下面的功能从UIView转换为UIImage时:

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这样

let imageData2 = btnImg?.pngData()

在将图像转换为图像之后,按照目前的方法应用base64转换。

答案 1 :(得分:2)

好的,因为您有一个嵌套的层次结构(UIView-> UIScrollView-> UIImageView),并且您不想将整个层次结构捕获为图像,所以最好使用UIView(层次结构中最顶层的图像) ,除非我理解错了,而您只需要UIImageView部分)

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()