SwiftのDBを使う ー RealmSwiftでImageを保存する。
こんにちは。川上です。
G.Wは、みなさん、お元気でしたか?
小生は、ほとんどでの変わらない毎日でしたけど。。
この頃書いているのは、備忘録Onlyだけで
イマイチ、面白ない話ばかりでスンマセン。
RealmSwift内のDBで保存できるデータのTypeは、マニュアル(Ver3.4)のGoogle翻訳コンニャクによると、
『レルムは、次のプロパティタイプをサポートしていますBool、Int、Int8、Int16、Int32、Int64、Double、Float、String、Date、とData。
CGFloat タイプはプラットフォームに依存しないため、プロパティは推奨されません。
String、DateおよびDataプロパティはオプションとすることができます。Objectプロパティはオプションでなければなりません。オプションの数値を格納するには、を使用しRealmOptionalます。』
で、つまり、UIImageは、直で保存できない!。とのことだ〜よね?。
と、いうので、UIImageをReamSwiftで保存するには、Data型に変更すること必要なのでした。
また、ReamSwiftのClass内で未保存用のTmp用のプロパティデータの設定処理が必要でした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | //写真生Imageデータ用 @objc dynamic var imagePhotos: UIImage? { set{ let maxImgSz = 15*1024*1024 var quarity:CGFloat = 0.9 var jpegSize = 0 self._imagePhotos = newValue if let value = newValue { //self.imagePhtData = UIImagePNGRepresentation(value) //写真はJPEGが良いらしい self.imagePhtData = UIImageJPEGRepresentation(value,quarity)! as NSData if let data1 = self.imagePhtData { jpegSize = data1.length print("bf: imagePhtData.size = \(jpegSize)") while (quarity > 0 && jpegSize > maxImgSz ) { quarity = quarity - 0.15 self.imagePhtData = UIImageJPEGRepresentation(value,quarity)! as NSData jpegSize = self.imagePhtData!.length } } print("af: imagePhtData.size = \(jpegSize)") } } get{ if let image = self._imagePhotos { return image } if let data = self.imagePhtData { self._imagePhotos = UIImage(data: data as Data) return self._imagePhotos } return nil } } @objc dynamic private var _imagePhotos: UIImage? = nil @objc dynamic private var imagePhtData: NSData? = nil //保存しないメンバ override static func ignoredProperties() -> [String] { return ["imagePhotos", "_imagePhotos"] } |
写真のJPEGデータをDataにコンバートできるUIImageJPEGRepresentation( )を使っていました。
これって、結構使えそうみたいです。
こんな感じで、如何でしょう・・・。
ではでは。。