如何将 png 文件包含在 JSON 文件中的 Swift 对象中?
How do you include png files in a Swift object from a JSON file?
我的 phone 正在将 Xcode JSON 文件中的数据解析为 Codable 模型中的对象,并使用 WCSession 传递数据以供观察。一切都很好。
JSON 文件仅包含 URLs/paths 图像而不是实际图像,所以我如何从我的 Xcode 项目目录添加图像作为同一 JSON 的一部分?
我要添加指向一组图像的 JSON 文件的本地路径?然后在我的数据对象中添加一个属性 let profile : UIImage
?它会是一个单独的结构数据对象吗?使用实时 URL 中的虚拟图像会更容易吗?我实际上如何将图像传递给 table 中的 UIImage/WKInterfaceImage?
struct MessageObject : Codable {
var title : String
//...
enum MessageKeys: String, CodingKey {
//...
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: MessageKeys.self)
self.title = try container.decode(String.self, forKey: .title)
//...
}
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: MessageKeys.self)
//...
}
}
传递图像的 Data
怎么样?
您的 Codable
模型可以包括这样的 属性:
var imageData: Data
然后你可以这样设置:
imageData = someUIImage.pngData()!
编码后,JSON 会变成:
{"imageData":"iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAAXNSR0IArs4c6QAAABxpRE9UAAAAAgAAAAAAAAAEAAAAKAAAAAQAAAAEAAAAWxzQ72oAAAAnSURBVCgVYjhzeOX\/\/1+uYGCQOAgz4JPEqgCmE0SDNKOYgC4JUgAAAAD\/\/ytw2SEAAAAnSURBVGP4\/+XKfxA+c3glHMPEQDQDPkmwAlw6YaYwwBTABJBpkBwAoM\/kGdRps6oAAAAASUVORK5CYII="}
要从数据中获取图像,只需执行以下操作:
UIImage(data: imageData)
如果您想事先创建 JSON 文件(不是即时创建)并且您的图像不打算更改,那么您可以将图像转换为 base64 编码的字符串,例如this one 然后将这些字符串添加到 JSON 文件:
{
"image1": "iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHL..."
"image2": "G2qoAEpaUQIZD4QYT4A62AHzQUqOiTgsgPEBCJIKAVJF..."
...
}
稍后为每个 base64 编码图像创建一个 Data 对象并最终创建一个 UIImage 将与此类似:
if let imageData = Data(base64Encoded: img1Base64) {
if let image = UIImage(data: imageData) {
imageView.image = image
}
}
我的 phone 正在将 Xcode JSON 文件中的数据解析为 Codable 模型中的对象,并使用 WCSession 传递数据以供观察。一切都很好。
JSON 文件仅包含 URLs/paths 图像而不是实际图像,所以我如何从我的 Xcode 项目目录添加图像作为同一 JSON 的一部分?
我要添加指向一组图像的 JSON 文件的本地路径?然后在我的数据对象中添加一个属性 let profile : UIImage
?它会是一个单独的结构数据对象吗?使用实时 URL 中的虚拟图像会更容易吗?我实际上如何将图像传递给 table 中的 UIImage/WKInterfaceImage?
struct MessageObject : Codable {
var title : String
//...
enum MessageKeys: String, CodingKey {
//...
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: MessageKeys.self)
self.title = try container.decode(String.self, forKey: .title)
//...
}
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: MessageKeys.self)
//...
}
}
传递图像的 Data
怎么样?
您的 Codable
模型可以包括这样的 属性:
var imageData: Data
然后你可以这样设置:
imageData = someUIImage.pngData()!
编码后,JSON 会变成:
{"imageData":"iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAAXNSR0IArs4c6QAAABxpRE9UAAAAAgAAAAAAAAAEAAAAKAAAAAQAAAAEAAAAWxzQ72oAAAAnSURBVCgVYjhzeOX\/\/1+uYGCQOAgz4JPEqgCmE0SDNKOYgC4JUgAAAAD\/\/ytw2SEAAAAnSURBVGP4\/+XKfxA+c3glHMPEQDQDPkmwAlw6YaYwwBTABJBpkBwAoM\/kGdRps6oAAAAASUVORK5CYII="}
要从数据中获取图像,只需执行以下操作:
UIImage(data: imageData)
如果您想事先创建 JSON 文件(不是即时创建)并且您的图像不打算更改,那么您可以将图像转换为 base64 编码的字符串,例如this one 然后将这些字符串添加到 JSON 文件:
{
"image1": "iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHL..."
"image2": "G2qoAEpaUQIZD4QYT4A62AHzQUqOiTgsgPEBCJIKAVJF..."
...
}
稍后为每个 base64 编码图像创建一个 Data 对象并最终创建一个 UIImage 将与此类似:
if let imageData = Data(base64Encoded: img1Base64) {
if let image = UIImage(data: imageData) {
imageView.image = image
}
}