Created
January 5, 2018 09:14
-
-
Save suzuhiroruri/aa83814042bb04120d91c03991f47c89 to your computer and use it in GitHub Desktop.
isDarkImageCGImageExtension
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// CGImage+.swift | |
// | |
// Created by Hiromasa Suzuki on 1/5/17. | |
// Copyright (c) 2017 Hiromasa Suzuki. All rights reserved. | |
// | |
import UIKit | |
extension CGImage { | |
var isDark: Bool { | |
get { | |
guard let imageData = self.dataProvider?.data else { return false } | |
// ピクセルレベルで画像の色を取得 | |
guard let ptr = CFDataGetBytePtr(imageData) else { return false } | |
// CFDataの長さを返す | |
let length = CFDataGetLength(imageData) | |
// 閾値(各人で調整) | |
let threshold = Int(Double(self.width * self.height) * 0.45) | |
var darkPixels = 0 | |
// 閾値のループ | |
for i in stride(from: 0, to: length, by: 4) { | |
let r = ptr[i] | |
let g = ptr[i + 1] | |
let b = ptr[i + 2] | |
// 明るさ(各人で調整) | |
let luminance = (0.299 * Double(r) + 0.587 * Double(g) + 0.114 * Double(b)) | |
if luminance < 150 { | |
darkPixels += 1 | |
// 閾値を超えたら黒っぽい画像とする | |
if darkPixels > threshold { | |
return true | |
} | |
} | |
} | |
// 最後まで閾値を超えなかったら、白っぽい画像とする | |
return false | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment