首页 > 解决方案 > 快速转换后保持相同的图像质量

问题描述

我指的是ZImageCropper用于我的项目来裁剪图像。但是,它会在转换过程中降低图像的质量。

我知道图像质量降低的原因之一是UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, false, 1)

我已经尝试将其更改UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, false, 0)UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, false, UIScreen.main.scale)

我从 Resize and Crop 2 Images 引用了我的代码影响了原始图像质量它确实有帮助,但是当我检查图像的质量时,它仍然降低了。有什么方法可以防止图像质量下降?

标签: swift

解决方案


在 iOS 10 及更高版本中,您可以调整任何 UIImage 的大小而不会造成质量损失,希望这会有所帮助:

func resize(targetSize: CGSize) -> UIImage {
    if #available(iOS 10.0, *) {
        return UIGraphicsImageRenderer(size: targetSize).image { _ in
            self.draw(in: CGRect(origin: .zero, size: targetSize))
        }
    } else {
        return resizeImage(maxSize: targetSize.width)
    }
}


func resizeImage(maxSize: CGFloat) -> UIImage {
    var newWidth = size.width
    var newHeight = size.height

    if size.width >= maxSize {
        newWidth = min(maxSize, size.width)
        newHeight = maxSize * size.height / size.width
    } else if size.height >= maxSize {
        newHeight = min(maxSize, size.height)
        newWidth = maxSize * size.width / size.height
    }

    UIGraphicsBeginImageContext(CGSize(width: newWidth, height: newHeight))
    draw(in: CGRect(x: 0, y: 0, width: newWidth, height: newHeight))
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return newImage!
}

推荐阅读