Swift - 单元测试中不同 iOS 中的不同 pngData() 大小

Swift - Different pngData() sizes in different iOS in unit tests

我正在使用单元测试在我的 Swift 项目中测试图像的旋转。

当我使用 iOS 13.7 进行测试时,我得到的结果与 pngData() 不同,而当我使用 iOS 11.2.

进行测试时,我得到了不同的结果

也很奇怪,我认为这是相关的,而且我真正的问题是 -

关于 iOS 13.7 比较 2 个图像 - 静态图像和旋转图像 - return 它们的数据大小相同。

在 iOS 11.2 - 我的静态图像将其数据大小更改了 X AMOUNT,我的旋转图像将其数据大小更改了 Y AMOUNT,现在它们具有不同的数据大小,我的测试失败了。

旋转函数 -

func cld_rotate(_ degree: Float) -> UIImage? {
    var newSize = CGRect(origin: CGPoint.zero, size: self.size).applying(CGAffineTransform(rotationAngle: cld_radians(from: Double(degree)))).size
    // Trim off the extremely small float value to prevent core graphics from rounding it up
    newSize.width = floor(newSize.width)
    newSize.height = floor(newSize.height)
    
    UIGraphicsBeginImageContextWithOptions(newSize, false, self.scale)
    let context = UIGraphicsGetCurrentContext()!
    
    // Move origin to middle
    context.translateBy(x: newSize.width/2, y: newSize.height/2)
    // Rotate around middle
    context.rotate(by: cld_radians(from: Double(degree)))
    // Draw the image at its center
    draw(in: CGRect(x: -self.size.width/2, y: -self.size.height/2, width: self.size.width, height: self.size.height))
    
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    
    return newImage
}

知道为什么 pngData() 在 2 个不同的 iOS 中使用的不一样吗?以及为什么旋转后的图像改变其数据大小的量与静态图像不同?

PNG 图像被压缩。旋转图像可能需要重新压缩,这可能会产生不同的输出。我希望文件大小会略有变化,因为压缩算法可以根据不同的输入数据产生不同的文件大小。 (我原来是说PNG图片使用有损压缩,但我错了。)

对我来说,问题是 iOS 13.7 如何在旋转时保持文件大小。我想知道它是否能够识别 90 度旋转并以某种方式转换压缩图像数据,而 iOS 11.2 无法做到这一点? (我的猜测是图像 compression/decompression 算法在 iOS 11.2 和 iOS 13.7 之间变得更智能,现在它能够识别 90 度旋转并在数据上使用算法而无需解压缩并重新压缩图像。)

我不确定你说的静态图像是什么。你是说你把PNG图片打开成UIImage,然后不做转换就导出回PNG?