投稿

6月, 2008の投稿を表示しています

Python で Mocking

役職は Linux System Administrator ですが、C, Ruby, Python でがりがりプログラムを書いてる今日この頃です。しかし、並行して Ruby と Python を使うと頭がおかしくなります。そんなわけで、結局のところ短いスクリプトは今でも bash/sed/AWK をばりばり使ってます。さすがに m4 は使いませんが。

で、本題。Python で Mock と言えば Mock が有名ですが、Google code には pymox なんでのもあったりして、結構便利ですよん。

convertでjpegファイルをresizeするときの小技

convertコマンドの形式は基本的に
convert [変換処理オプション]
となっています。ImageMagickのサイトのconvertの例
convert JPEG -resize SIZEOUTPUTとなっていますが、実はこの単純な例であればconvert -size SIZE JPEG OUTPUT
とも書けます。違いといえば、前者は convert コマンドが能動的にサイズ変換(とその後のファイル形式の変換)をするのに対し、後者はconvertコマンドが利用しているJPEGライブラリ(libjpeg.so.X)が指定したサイズで最初から(圧縮された情報を)指定した画像サイズでイメージ展開してしまうということです。すなわち後者ではconvertはファイル形式の変換しかしません。

で、この何がTipsかというと、実はJpegのような自然画の圧縮は、元の画像サイズによらないような内部形式になっているので、元のサイズでイメージ展開しようと違うサイズでイメージ展開しようと内部処理はあまり変わらないのです。なのでサイズ変換はJPEG形式のままでしておいた方が素早く処理できるんです。

一方の前者の方式では、既に展開されてしまったイメージに対して、convert コマンドが自力でリサイズ処理をしなくれはなりません。これでは元がJPEGであったというメリットがまったく活かせないのです。

うまく説明できてない気がしますが、感覚的には、後者は圧縮されたままサイズ変換ができるのに対して、前者は一回展開して、それからサイズ変換をしなければならないというところでしょうか。

とりあえず、手元の1.8MのJPEG画像を 1/4 サイズにするのに、後者の方が10倍以上速いです。さらに原理的にも、後者の方がきれいな画像が得られると思います。

6月6日のGoogleロゴ

なんか6月6日だけやたら「Google ロゴ」での検索が多かったので調べてみたら、ベラスケス(Velázquez)の誕生日だったらしい。で、他サイトをあたると、どうも「ラス・メニーナス」風だったらしいです。

「ラス・メニーナス」ってどっかで聞いたことがあるようなと思ったのですが、そう、つい最近バルセロナのピカソ美術館でピカソが「カバー」(本当は何と言えばいいのだろう?)したバージョンを見てきたばっかりでした。本当に有名な絵だったんですね(汗