SwiftでUIImageとStringの相互変換

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をクライアントで取得した場合には本来+だった部分が空白に変換されてしまうことがあるため取得した際にはこのような変換が必要となります。

C++らしく日付取得をする

C++で日付取得する方法について

C言語では<time.h>を利用して時間の構造体を取得していました、同様にC++は上位置換なので同じ方法で取得することができますがなんか違和感を覚える人向けにC++チックな日付の取得について

C++で日付を利用するときには以下の2つのヘッダを利用すると便利です

#include <iomanip> //時間を取得するため
#include <sstream> //値を簡単に文字列にするため

例えば 2015-5-19 のようなフォーマットの文字列が必要な場合はこのように記述します


    //現在日時を取得する
    time_t t = time(nullptr);

    //形式を変換する    
    const tm* lt = localtime(&t);

    //sに独自フォーマットになるように連結していく
    std::stringstream s;
    s<<"20";
    s<<lt->tm_year-100; //100を引くことで20xxのxxの部分になる
    s<<"-";
    s<<lt->tm_mon+1; //月を0からカウントしているため
    s<<"-";
    s<<lt->tm_mday; //そのまま

    //result = "2015-5-19" 
    std::string result = s.str();

stringstreamを利用することによってデフォルトのフォーマットだけでは対応できない場合も独自のフォーマットを定義できる。

iOSアプリの価格が2割値上げ!

apple-Image

AppleStoreにある全アプリが4月3日から2割の値上げがされた。

AppleStoreの値上げは約一年ぶりの更新となっている、値上げの理由は確かではない円安の傾向が続いているためだと思われる。

続きを読む

MongoDBの脆弱性が改善されたのでアップデートしよう

mongodb

現在スキーマレスでビッグデータに対応できるデータベースとしてMongoDBが注目を浴びている。

だが今年2月、セキュリティ会社であるFortinetがリモートアクセスによってデータベースをクラッシュできることを発見した。さらに同社ではその脆弱性を利用してサービス妨害(Dos)攻撃をできることを実証した。

続きを読む

初心者が3日で作ったアプリが10万円の収入になった話

money

アプリを作ってみたいと思った当初、無知な状態だったのでとりあえずスマホアプリ開発の本を買って、ある程度読んだら実際にアプリを作成してみたいと思い画面が2ページしかない貧相なツールアプリを作ってストアに出しました。

スマホといえばiOS、Androidとありますが私はAndroidで開発をしていました、自分でもクオリティが低いと思っていたのでこんなレベルでいいのかなと不安を抱えたままストアに出しました。幸いなことにiOSではアプリを出すのに審査がありますがAndroidは申請すれば審査はなく数時間後にはストアにあがるのですぐにストアに出すことができました。

続きを読む

Macで同じ文章を二度と打たなくて済む方法

apple-Image

Macユーザー必見”長い文章を二度と打たなくて済む方法”

パソコンを使っているとよく打つ文章、いわゆるテンプレート文章だ。

メールの返信のフッターだったりブログの最初のあいさつもそれにあたる。

続きを読む