Создать, если не существует, Vertex и Edge в 1 запросе gremlin

Вот один из подходов - это не моя работа ... Я нашел его на https://gist.github.com/adamcichy/2d00c7a54009b4a9751ba513749c485e (повторное размещение его здесь, поскольку ссылки могут неудача в будущем):

extension CGImage {
    var isDark: Bool {
        get {
            guard let imageData = self.dataProvider?.data else { return false }
            guard let ptr = CFDataGetBytePtr(imageData) else { return false }
            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
        }
    }
}

extension UIImage {
    var isDark: Bool {
        get {
            return self.cgImage?.isDark ?? false
        }
    }
}

Тогда вы можете использовать (например):

    // default to false (meaning, the image is not dark)
    let b = myImageView.image?.isDark ?? false

    if b {
        // use a light-color for textColor
    } else {
        // use a dark-color for textColor
    }

Это не совсем так просто, хотя ... Ваше изображение может иметь свет и темные области, поэтому вам нужно будет только вычислить область изображения, которая будет за вашей меткой. Но это хорошая отправная точка.

Изменить: как прокомментировал rmaddy, это может не дать вам желаемых результатов. Изображения, особенно фотографии, имеют различные светлые и темные пиксели / области. Например, у вас может быть темное здание против яркого неба - если ярлык начинается в здании и заканчивается на небе, проверка «темноты» ограничивающего прямоугольника не принесет вам много пользы.

Один альтернативный подход - использовать белый текст с темным полупрозрачным прямоугольником (закругленные углы, мягкие края) за текстом.

0
задан thangdc94 19 January 2019 в 10:05
поделиться