compressionQuality与迅速缩小图像尺寸(高度和宽度)之间的差异

问题描述 投票:0回答:2

在以下代码中,我通过降低图像的CompressionQuality并减小图像的大小(高度和宽度)将图像上传到服务器。但是我想知道在两种情况下实际发生的情况。 compressionQuality或仅压缩perticular的高度和宽度会发生什么?谁能解释这个概念。

func compressImage() -> UIImage? {

    enum JPEGQuality: CGFloat {
        case lowest  = 0
        case low     = 0.25
        case medium  = 0.5
        case high    = 0.75
        case highest = 1
    }

    // Reducing file size to a 10th
    var actualHeight: CGFloat = self.size.height
    var actualWidth: CGFloat = self.size.width
    print("DEBUG: actualHeight \(actualHeight)")
    print("DEBUG: actualWidth \(actualWidth)")

    //For iphone 5s
    let maxHeight: CGFloat = 1136.0
    let maxWidth: CGFloat = 640.0


    var imgRatio: CGFloat = actualWidth/actualHeight
    let maxRatio: CGFloat = maxWidth/maxHeight
    var compressionQuality: CGFloat = JPEGQuality.highest.rawValue

    if actualHeight > maxHeight || actualWidth > maxWidth {
        compressionQuality = JPEGQuality.high.rawValue
        if imgRatio < maxRatio {
            //adjust width according to maxHeight
            imgRatio = maxHeight / actualHeight
            actualWidth = imgRatio * actualWidth
            actualHeight = maxHeight

            print("DEBUG: actualHeight after compression  \(actualHeight)")
            print("DEBUG: actualWidth after compression \(actualWidth)")
        } else if imgRatio > maxRatio {
            //adjust height according to maxWidth
            imgRatio = maxWidth / actualWidth
            actualHeight = imgRatio * actualHeight
            actualWidth = maxWidth
            print("DEBUG: actualHeight after compression  \(actualHeight)")
            print("DEBUG: actualWidth after compression \(actualWidth)")
        } else {
            actualHeight = maxHeight
            actualWidth = maxWidth
            compressionQuality = JPEGQuality.highest.rawValue
            print("DEBUG: actualHeight after compression  \(actualHeight)")
            print("DEBUG: actualWidth after compression \(actualWidth)")
        }
    }
    let rect = CGRect(x: 0.0, y: 0.0, width: actualWidth, height: actualHeight)
    UIGraphicsBeginImageContext(rect.size)
    self.draw(in: rect)
    guard let img = UIGraphicsGetImageFromCurrentImageContext() else {
        return nil
    }
    UIGraphicsEndImageContext()
    guard let imageData = img.jpegData(compressionQuality: compressionQuality) else {
        return nil
    }
    print("DEBUG: IMAGE DATA IS \(imageData)")

    return UIImage(data: imageData)
}
swift uiimage
2个回答
0
投票

压缩图像是将图像保存为当前状态,例如尺寸,尽管质量较低。这导致图像的文件大小相同,但文件大小较小。像素密度较少的“数据”或颜色减少会损失质量。

[在大多数情况下,您要确定大小才能显示图像。特别是对于网页设计。如果您想节省下载时间和文件大小,则可以选择压缩图像,或者比较将图像另存为jpg和png。每个都使用开箱即用的不同压缩算法。

您可以缩小图像的像素大小。但是随后您将要拉伸图像以适应更大的尺寸,并且看起来不那么清晰。

如果您有很多大图像,并且您知道永远不会使用它们的真实尺寸,那么可以节省空间来缩小图像尺寸。

以任何方式更改图像始终会影响质量。


0
投票

UIImageview根据其内容模式属性指定的行为自动缩放和裁剪。

imageView.contentMode = .scaleAspectFit
imageView.image = image

然后为什么我们需要调整该图像的大小?当它大于显示它的图像视图时。假设您有30Mb的图片。要在imageview上显示该图片,首先需要将jpeg解码为位图。要在imageview上安装合适的内存会占用大量内存,并且应用程序对于用户来说可能会变慢。这就是为什么我们使用图像调整大小的原因。有一种技术。它称为下采样。因此,图像调整大小意味着您将要缩短图像的分辨率。因此图像尺寸将减小。

图像压缩可在不降低分辨率的情况下减小图像的文件大小。当然,减小文件大小会影响图像的质量。

© www.soinside.com 2019 - 2024. All rights reserved.