Swiftを使ってデータベースに画像をPOSTしたい場合、UIImageはそのままPOSTすることはできません、そこで今回はUIImageとStringの相互変換の処理について紹介します。(qiitaにもまとめましたが)
まずはUIImageをStringに変換する関数の例:
//UIImageをデータベースに格納できるStringに変換する func Image2String(image:UIImage) -> String? { //画像をNSDataに変換 let data:NSData = UIImagePNGRepresentation(image) //NSDataへの変換が成功していたら if let pngData = data { //BASE64のStringに変換する let encodeString:String = pngData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength) return encodeString } return nil }
UIImagePNGの部分はJPEGに変えることもできます。
次はStringをUIImageに変換する関数の例:
//StringをUIImageに変換する func String2Image(imageString:String) -> UIImage?{ //空白を+に変換する var base64String = imageString.stringByReplacingOccurrencesOfString(" ", withString:"+",options: nil, range:nil) //BASE64の文字列をデコードしてNSDataを生成 let decodeBase64:NSData? = NSData(base64EncodedString:base64String, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters) //NSDataの生成が成功していたら if let decodeSuccess = decodeBase64 { //NSDataからUIImageを生成 let img = UIImage(data: decodeSuccess) //結果を返却 return img } return nil }
一番のポイントは空白を+に変換する処理。
例えばデータベースに保存した画像のStringをクライアントで取得した場合には本来+だった部分が空白に変換されてしまうことがあるため取得した際にはこのような変換が必要となります。