Update image darkness algorithm to use an average instead of checking individual pixels

This commit is contained in:
Maurice Parker 2019-10-29 20:48:07 -05:00
parent 91d5e809e4
commit 2fead1f87d

View File

@ -15,27 +15,23 @@ extension CGImage {
guard let ptr = CFDataGetBytePtr(imageData) else { return false } guard let ptr = CFDataGetBytePtr(imageData) else { return false }
let length = CFDataGetLength(imageData) let length = CFDataGetLength(imageData)
var visiblePixels = 0 var pixelCount = 0
var darkPixels = 0 var totalLuminance = 0.0
for i in stride(from: 0, to: length, by: 4) { for i in stride(from: 0, to: length, by: 4) {
let r = ptr[i] let r = ptr[i]
let g = ptr[i + 1] let g = ptr[i + 1]
let b = ptr[i + 2] let b = ptr[i + 2]
let a = ptr[i + 3]
let luminance = (0.299 * Double(r) + 0.587 * Double(g) + 0.114 * Double(b)) let luminance = (0.299 * Double(r) + 0.587 * Double(g) + 0.114 * Double(b))
if Double(a) > 0.0 { totalLuminance += luminance
visiblePixels += 1 pixelCount += 1
if luminance < 50 {
darkPixels += 1
}
}
} }
return Double(darkPixels) / Double(visiblePixels) > 0.4 let avgLuminance = totalLuminance / Double(pixelCount)
return avgLuminance < 37.5
} }
} }