大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

SwiftのDBを使う ー RealmSwiftでImageを保存する。

株式会社クローバーフィールドの経営理念
著者:川上洋
公開日:2018/05/08
最終更新日:2018/06/20
カテゴリー:技術情報 雑記
タグ:

こんにちは。川上です。

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用のプロパティデータの設定処理が必要でした。

 //写真生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( )を使っていました。
これって、結構使えそうみたいです。
こんな感じで、如何でしょう・・・。

ではでは。。

    上に戻る