[XCODE] イメージをWebからダウンロードしてきて、base64で保存。base64からUIImageを作成する。
こんにちは、@yoheiMuneです。
今日は、UIImage -> base64, base64 -> UIImageへそれぞれ変換する方法をブログに書きたいと思います。
そんな時に、画像をBase64エンコーディングで文字列化し、それをDBやUserDefaultsなどへ保存すると便利な場合があります。
今回は、画像ファイルをBase64エンコードする方法と、Base64エンコードからUIImageを作成する方法を記載しました。
以下のNSData+Base64.hとNSData+Base64.mのファイルを利用します。
以下から各ファイルをダウンロードして、XCODE Projectに追加します。
(メモリ管理方法を自動にしている場合には、autoreleaseのコードなどを削除する必要があります)
- https://github.com/l4u/NSData-Base64
上記のコードは、NSDataの内容をBase64エンコーディングする実装内容のため、今回の画像の他に様々なバイナリーデータをBase64にすることが可能です。
以下のように実装します。
これでBase64エンコードできた文字列が取得できました。
以下のように実装すると実現できます。
こちらもNSData+Base64.hで拡張されたNSDataクラスのメソッドを利用します。
こんな感じで簡単に実装することが可能です。
データの保存形式の選択肢が多いと、より柔軟な実装ができて良いかもしれません。
簡単な内容ですが以上になります。最後までご覧頂きましてありがとうございました。
今日は、UIImage -> base64, base64 -> UIImageへそれぞれ変換する方法をブログに書きたいと思います。
画像をbase64エンコーディングで保存する
Webサーバーからダウンロードしてきた画像を、UIImageとしてiPhoneアプリにキャッシュしたい場合に、 ファイル名など他の画像とかぶらないように決めて、FileSystemへ保存するのはちょっと面倒。そんな時に、画像をBase64エンコーディングで文字列化し、それをDBやUserDefaultsなどへ保存すると便利な場合があります。
今回は、画像ファイルをBase64エンコードする方法と、Base64エンコードからUIImageを作成する方法を記載しました。
前準備
Base64エンコーディングは、そこまで難しいエンコードではないので自前で実装しても良いのですが、 Base64に変換してくれるコードがgithubに公開されているので、今回はそれを使います。以下のNSData+Base64.hとNSData+Base64.mのファイルを利用します。
以下から各ファイルをダウンロードして、XCODE Projectに追加します。
(メモリ管理方法を自動にしている場合には、autoreleaseのコードなどを削除する必要があります)
- https://github.com/l4u/NSData-Base64
上記のコードは、NSDataの内容をBase64エンコーディングする実装内容のため、今回の画像の他に様々なバイナリーデータをBase64にすることが可能です。
UIImageの内容をBase64に変換する
今回は、各サイトのFavicon画像を取得して、Base64に変換して保存するという実装内容です。以下のように実装します。
// NSDataにbase64変換するメソッドを追加する。 #import "NSData+Base64.h" /* 途中省略 */ // google.comのFaviconをロードしてくる。 NSURL *url = [[NSURL alloc] initWithString:@"http://www.google.com/favicon.ico"]; NSError *error = nil; NSData *data = [[NSData alloc] initWithContentsOfURL:url options:NSDataReadingUncached error:&error]; if (error) { // favicon取得処理でエラーが発生した場合には、処理を中止する。 NSLog(@"/favicon.ico load failed. reason = %@", error); return; } // ico -> png -> base64に変換する。 UIImage *icon = [UIImage imageWithData:data]; NSData *pngData = UIImagePNGRepresentation(icon); NSString *base64String = [pngData base64EncodedString];今回は、ファイル形式をPNGに統一して保存したかったので、途中でUIImagePNGRepresentation関数を挟んでいます。
これでBase64エンコードできた文字列が取得できました。
base64エンコードされた文字列からUIImage作成する
続いて、base64エンコード文字列からUIImageを作成します。以下のように実装すると実現できます。
// base64エンコードされた画像データ NSString *base64String = [pngData base64EncodedString]; // base64 -> UIImageへ変換する。 NSData *imageData = [NSData dataFromBase64String:base64String]; UIImage *icon = [UIImage imageWithData:imageData];
こちらもNSData+Base64.hで拡張されたNSDataクラスのメソッドを利用します。
こんな感じで簡単に実装することが可能です。
最後に
画像をFileSystemへ保存したり、NSArchiveを使ってDBにバイナリーデータとして保存することも可能ですが、 Base64で保存する選択肢も悪くないかなぁと思います。データの保存形式の選択肢が多いと、より柔軟な実装ができて良いかもしれません。
簡単な内容ですが以上になります。最後までご覧頂きましてありがとうございました。