簡體   English   中英

Swift - 單元測試中不同 iOS 中的不同 pngData() 大小

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

我正在使用單元測試在我的 Swift 項目上測試圖像的旋轉。

當我使用 iOS 13.7 和 iOS 11.2 進行測試時,我得到的結果與pngData()不同。

也很奇怪,我認為這是相關的,而且我真正的問題是-

在 iOS 13.7 上比較 2 個圖像 - 靜態圖像和旋轉圖像 - 返回它們的數據大小相同。

在 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 無法做到這一點? (我的猜測是圖像壓縮/解壓縮算法在 iOS 11.2 和 iOS 13.7 之間變得更加智能,現在它能夠識別 90 度旋轉並對數據使用算法,而無需解壓縮和重新壓縮圖像。)

我不確定您對靜態圖像的看法。 您是說將 PNG 圖像打開為 UIImage 然后將其導出回 PNG 而不進行轉換嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM