Skip to content

Instantly share code, notes, and snippets.

@suzuhiroruri
Created January 5, 2018 09:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save suzuhiroruri/aa83814042bb04120d91c03991f47c89 to your computer and use it in GitHub Desktop.
Save suzuhiroruri/aa83814042bb04120d91c03991f47c89 to your computer and use it in GitHub Desktop.
isDarkImageCGImageExtension
//
// 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