Hatena::Groupbugrammer

蟲!虫!蟲!

Esehara Profile Site (by Heroku) / Github / bookable.jp (My Service)
過去の記事一覧はこちら

なにかあったら「えせはら あっと Gmail」まで送って頂ければ幸いです。
株式会社マリーチでは、Pythonやdjango、また自然言語処理を使ったお仕事を探しています

 | 

2011-11-11

[]PngからDivを吐き出すページを作った 22:51

 

f:id:nisemono_san:20111110224945p:image

 Pypngという奴が面白かったので使ってみた。解説は下のエントリがわかりやすい。

 Google App Engineで画像処理するためにpypngを使ってみた - ボットになりきれない何か

 これを使った理由は、各マスのRGB配列で渡されるからパースしやすいなーという理由だけでしかない。もうちょっとちゃんと読めば、使いやすいライブラリもあるのかもしれないけど、今回はこれで。

 で、RGBは10進法なので、それを16進法にしてやる必要がある。pythonだと、hex関数というのがあるので、それを使う。

>>> hex(32)
'0x20'

 16進法を文字列で買えしてくれるので、replaceで文字列を取り除いたあとに、スタイルシートで使うという理由から、upperで大文字に。さらに、そのままだと0~15で文字列が一文字になってしまうので、欠損を穴埋めするためにも、文字が一文字だった場合は、"0"の文字列を追加している。

 メモとしてはそれくらいなんだけど、イテレーターのコピーについてメモしておく。

 Pythonは前にも書いたとおり、配列が参照渡しだったりするので、配列を他の変数にコピーしたい場合は、copyというモジュールを使うのだけれども、イテレーターだとこのコピーが使えない。なので、itertoolsを使う必要が出てくる。

 イテレータのコピー - None is None is None

 そんな感じではきだしてくれるのが、下のコード。

 Png to Div ? GitHub

せっかくなので、Webアプリにしてみた。

 No such app

Flaskで直接ファイルのデータを受け取る

 で、ちょっと躓いたところとして、FormデータのPostからファイルを取得するところ。基本的に、ファイルデータに関しては、Flaskでは次のように受け取れる。

file = request.files['files']

 ここから、内部のファイルを取り出すためには、次のように行う。

file.stream.read()

 例えば、Pythonだとopen関数を使うことによって、ファイルオブジェクトというものを作るらしい。だから、今回使われているライブラリもファイルオブジェクトに該当するものを渡してあげないといけない。

 ただ、ファイルオブジェクトもこのfile.streamも、read()関数によって、ファイルの内容を開くことには変わりが無い。とするならば、ここでダック・タイピングが生きてくる。

ダックタイピング

 ダックタイピングとは、「もしアヒルのように歩き、アヒルのように歩くなら、それはアヒルである」という考えに要約される技法だ。その辺に関しては、Rubyの開発者のまつもと氏が書いている記事がわかりやすいのかな。

まつもと直伝 プログラミングのオキテ - まつもと直伝 プログラミングのオキテ 第4回(3):ITpro

 正確な理解かどうかはわからないが、とりあえず、「何かしらのメソッドがあり、その内容が処理できるものであるならば、そういうものとして振る舞える」ということだろう、と思う。だから、今回の場合でも、違うオブジェクトであったとしても、共通したread()という関数があり、内部はpngファイルになっているわけだから、そういうものとして処理できるということになる、ということだ。メリットとしては、今回のように「実際はpngだし、同じメソッドなんだから、そういうものとして処理してくれよ」といったときに、とても実装が楽になるという点があるんじゃないかなと思う。

 ダックタイピングについては、また改めて勉強したいところですね。

JayantaJayanta2012/02/27 16:25Super informative wirtnig; keep it up.

teflclvteflclv2012/02/28 04:12J17EYM <a href="http://nfzxfxgvgwhz.com/">nfzxfxgvgwhz</a>

zgcaujczgcaujc2012/02/28 19:58cm5p69 , [url=http://nsuwavnvtdoq.com/]nsuwavnvtdoq[/url], [link=http://ymuriufbjabo.com/]ymuriufbjabo[/link], http://xgwhnxszgbmk.com/

fgjlzsfgjlzs2012/03/02 00:103X6fmB <a href="http://hykrpgobicub.com/">hykrpgobicub</a>

goptapxvuwdgoptapxvuwd2012/03/14 09:21gLQug7 , [url=http://jgywyqtysroi.com/]jgywyqtysroi[/url], [link=http://azxsldcwfmiq.com/]azxsldcwfmiq[/link], http://ljkzitmibjxg.com/

 |