[RMagick] ネットワーク経由で画像の送信


ネットワーク経由で画像の送信してみる。
経緯としては、
今、画像用のAPIを開発しようとしていて、
ネットワーク経由で画像データをどうやって渡そう。ってとこからはじまりました。
作業自体はシンプルですが、一応自分用に書き留めておくことにしました。

使用する言語は表題通りRMagickです。
RMagick Reference
http://studio.imagemagick.org/RMagick/doc/

ネットワークはHTTP/HTTPSでの送信になります。

流れとしては以下な感じです。
①[Client] 画像データ取得&加工
②[Client] 画像データ送信
③[Server] 画像データ受信
④[Server] 画像データ解析&保存

検証

①【[Client] 画像データ取得&加工】

Railsコンソールで試しているのでデフォルトで入っているrails.pngを使用します。

②【[Client] 画像データ送信】
次にhttpで送信してみます。
そのまま上記のコンソール上でhttpで送信します。
open-uriを使えば楽チンです。
試しにパラメーター「?image=」にいれてみます。
ただ、readデータそのままだと文字化け引き起こして送信できないので
Base64変換する必要がある。さらにBase64だと”+”や”/”が問題を起こす事もあるので
さらに URI.escapeをしてあげる。
Base64変換 → URI.escapse

※HTTP圧縮
実際に送信する時は、httpクライアントにヘッダーで圧縮アルゴリズムを使用してサイズを縮小する必要があります。
ほとんどのWEBブラウザでは自動的に付加するが、プログラムクライアントではされていない。
HTTP圧縮用ヘッダー
Accept-Encoding: gzip,compress

③【[Server] 画像データ受信】 & 【[Server] 画像データ解析&保存】
サーバー側ではimageパラメーターで渡されてきたデータを取得&解析します。
基本的には、送信時の逆の流れを行えばいいので、
URI.decode >> Base64.decode64(params[:image])
という事になります。
解析したファイルにリサイズなどの処理を加えたいので、そのままRMagickに渡します。

基本的な流れ。

あとは上記にリサイズなどの処理を追加すればよいのかなと。