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

Posted

技术标签:

【中文标题】快速转换后保持相同的图像质量【英文标题】:Keep same image quality after converting in swift 【发布时间】:2018-08-29 05:43:19 【问题描述】:

我指的是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 affected the original image quality 引用了我的代码,它确实有帮助,但是当我检查图像的质量时,它仍然降低了。有什么办法可以防止画质下降?

【问题讨论】:

您裁剪了一张图片,将其拉伸到与原始图片相同的大小,但您对质量下降感到失望?你期望会发生什么? (顺便说一句,我没有投反对票) 嗨@Alexander 感谢您没有投票,我很抱歉,但我有点困惑。拉伸图像是什么意思?图像实际上并不模糊,但是当我计算图像中的像素时,它是应有的 1/3 【参考方案1】:

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!

【讨论】:

以上是关于快速转换后保持相同的图像质量的主要内容,如果未能解决你的问题,请参考以下文章

缩小php中的图像以快速查看并保持质量[关闭]

如何将表格另存为图像,但又保持其质量? R

内嵌图像质量低

在颤振中使用 image.asset 时图像质量下降

Perl Image Resize 使用 GD 并保持图像质量

在android中创建缩放位图时保持图像质量