[英]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.