こんにちは!ぐちです。
WebAPI等で画像を返すには
サーバサイドをPHP、クライアントサイドはスマホアプリなんて構成最近よくあります。というかスマホアプリ(特に業務系は必須かな?)ではほとんどの場合は管理画面と呼ばれるようなサーバサイドで動くCMSが必要になります。
その際に画像データをクライアントサイドで返す方法はいくらかあると思います。その中でも今回業務で検討したのは一般的な下記の2つでした。
- サーバ上のファイルパスを返す
- 画像データを何かしらの形にエンコードして返す
上記の選択肢から今回採択したものはエンコードして返す形でした。
PHPでBase64エンコード
サーバサイドはPHP、MySQLなんていういわゆるLAMP環境でしたので下記の方法でbase64エンコードして返却値のjsonに入れ込んでクライアントサイドへ返すことにしました。
リクエスト頻度が高い場合は都度エンコードしていると処理効率が悪くなると思いますが今回はそこまで頻度が高くない部分でしたので下記のコードで進めました。
$retDate['img'] = base64_encode(@file_get_contents(【エンコードするファイルパス】));
ちなみにfile_get_contents関数の前にある@は存在しないURLやパスを指定したときに出るWarningを非表示にする構文です。
URLやパスのファイルが存在するしないで処理を分けたい場合は以下のようにすればハンドリングすることができます。
if ($f = @file_get_contents(【読み込むファイルパス】)) { // ファイルの読み込みが成功した場合 } else { // ファイルが存在しない場合 }