【问题标题】:How can I store an object's color data in MySQL database?如何将对象的颜色数据存储在 MySQL 数据库中?
【发布时间】:2016-09-01 06:09:02
【问题描述】:

我在 iOS Swift 应用程序中遇到一种情况,用户可以通过添加其他视图和/或更改视图的背景颜色来“自定义屏幕”。当他们点击保存时,我想将每个对象的属性以及父视图的背景颜色存储到 MySQL 数据库中,以便以后检索和重建视图。所有数据更新均通过 PHP REST 服务完成。

我目前正在努力处理背景颜色的颜色数据。如果我 print() 颜色,我会得到类似“UIDeviceRGBColorSpace 0.866667 0.92549 1 1”的信息。我还可以使用以下方法将其转换为 NSData:

let data = NSKeyedArchiver.archivedDataWithRootObject(self.view.backgroundColor!)

但是,无论哪种情况,我都不知道如何通过 PHP REST 服务将数据保存到数据库,甚至不知道我会使用什么数据类型。

我是不是完全走错了路?我应该做一些事情,比如抓取 RGB 值和 Alpha 并将它们保存到数据库中的 4 个属性中,还是获取十六进制值并将其存储?也许,还有一种更直接的方法?

【问题讨论】:

  • RGB 会更好,然后您可以在 Android 或 Web 或任何其他平台上重复使用相同的数据。
  • 您可以使用标准的 HTML 样式表示将它们存储为十六进制。
  • 谢谢,食人魔。获得 RGB 值的最佳方法是什么?转换为 CIColor?看起来您可以从中获取 RGB 单个值。
  • 谢谢,@Wezly。那是在 Objective-C 中,而不是在 Swift 中。但是,我刚刚在Extract RGB Values From UIColor 中找到了 Swift 解决方案。

标签: php ios mysql swift colors


【解决方案1】:

如果您关心保留在该 NSColor / UIColor 实例中编码的所有信息(其原始颜色空间中的原始精确值,可能不是 RGB、校准等)并且需要将其编码为字符串(而不是例如二进制blob,MySQL 也可以),您可以使用base64 编码 - 以 base64 编码形式向您的服务器发送颜色,并在检索时将其解码。

let color = NSColor.blackColor()
let data = NSKeyedArchiver.archivedDataWithRootObject(color)

// this can go in your database
let base64EncodedColorString = data.base64EncodedStringWithOptions([])

let decodedColorData = NSData(base64EncodedString: base64EncodedColorString, options: [])

NSKeyedUnarchiver.unarchiveObjectWithData(decodedColorData!)

这有一个明显的缺点,即您的服务器将不知道数据编码的内容,所以如果您关心这一点,那么getting the colour's RGB components 并将它们存储为字符串可能是更好的选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-15
    • 2013-06-30
    • 2011-02-14
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 2011-01-21
    相关资源
    最近更新 更多