[pukiwiki]
急に、Flash(SWF)のヘッダを調べたくなったのだけれど、バイナリエディタだけだと大変なので、ビット単位で調べるための関数を書いてみました
で、そもそも、何で今更FlashをPythonでいじろうと思ったかといいますと。。。
*[[【動画】世界初 3Dデジカメ:http://www.tv-tokyo.co.jp/emorning/contents/2009-04/03/028652.html]]
こちらの立体カメラの静止画、左右2枚を ”「マウスドラッグすると微妙に向きが変わって見えるFlash」”に変換したいな、と。
(できれば、左右の画像の中割も行いたい)
[/pukiwiki]
—-
どこかで作ってた人が居たはずなのですが、ちょっと判らなかったので、自分で作ることに
ここまでで気力が尽きたので、SWFの調査はまた今度(汗
# -*- coding: utf-8 -*- "bit.py" def bitreader(s): u"""文字列をビット単位で調べるためのジェネレータ""" for i in s : i=ord(i) for j in xrange(8): ret= 1 if ( i & 0x80) else 0 i<<=1 yield ret def bit2str(blist): bit_length=len(blist) #print "bit_length",bit_length byte_length=bit_length//8 #print "byte_length",byte_length ret=[] i=0 for i in xrange(0,byte_length*8,8): ret.append( chr(bit2int(blist[i:i+8]))) if bit_length%8 : remain=blist[i+8:] #print "len(remain)",len(remain) remain+=[0 for x in xrange(8-len(remain))] #print "len(remain)",len(remain) ret.append( chr(bit2int(remain))) ret="".join(ret) return ret def bit2int(blist,endian="big"): u""" bit2int([0,0,0,0, 0,0,0,0,1]) -> 1 bit2int([0,0,0,0, 0,0,0,0,1],endian="little") -> 256 """ ret=0 blist1=list(blist[:]) if endian=="big": blist2=blist1[:] else: blist2=[] for i in xrange(0,len(blist1),8): blist2=blist1[i:i+8]+blist2 for b in blist2: ret<<=1 ret+=b return ret from math import log def int2bit(i): u"""int2bit(32) -> [1, 0, 0, 0, 0, 0] i>0 """ ret=[] if not i :return [0,] for j in xrange( log(i) /log(2)+1): ret.append(1 if i& 0x01 else 0) i>>=1 ret.reverse() return ret def str2int(s,endian="big"): "str2int("\x03\x02\x01") -> 0x010203 big endian" t=0 if endian=="big": s=reversed(s) for i in s: t<<=8 t+=ord(i) return t if __name__=="__main__": #ひととおり テスト s="".join([chr(x) for x in range(255)]) bits=[x for x in bitreader(s)] bits.append(1) s+="\x80" s2=bit2str(bits) if s!=s2 : print """ bits=[x for x in bitreader(s)] s2=bit2str(bits] """ raise Exception s2=[] for c in s : c2=chr(bit2int([x for x in bitreader(c)])) if c2!=c : print "%s"% ord(c) raise Exception s2.append(c2) s2="".join(s2) if s2!=s : print "s2!=s" raise Exception blist=[x for x in bitreader(s)] s3=[] b2=range(8) for i,b in enumerate(blist): m=i%8 b2[m]=b if m==7 : s3.append(chr(bit2int(b2))) s3="".join(s3) if s3!=s : print "s3!=s" raise Exception if True : for i in xrange(65536,65536*256,65535): if (bit2int(int2bit(i)))!=i: print i raise Exception print "OK"
[pukiwiki]
*その他 関連3Dデジカメ関連
[[裸眼で立体映像を楽しむことが可能な世界初の立体3Dデジタルカメラ「FinePix Real3D」の実機を触ってきました:http://gigazine.net/index.php?/news/comments/20090326_fuji_real3dsystem/]]
—-
-[[『クラシック立体写真(ステレオカメラとステレオビュアー)の秘蔵展』:http://fujifilmsquare.jp/detail/08032802.html]]
-[[ステレオカメラ(ウィキペディア):http://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%86%E3%83%AC%E3%82%AA%E3%82%AB%E3%83%A1%E3%83%A9]]
-[[私が所有しているステレオカメラの色々について(Yossy’s World):http://ww2.tiki.ne.jp/~yossy/main1.html]]
こういうレトロなデザインを期待してたので、ちょっと違ったかなー
ただ、こういうキワモノは、売ってるときに買わないと、次はいつ製品化されるか判らないので、一応、定額給付金を貯金しておくことに(をぃ
でも、定額給付金に、どれぐらい足せば買えるのかしらん?あまり高いと買えない。。。
*写真の寿命はOSよりも長い
“ちなみに、3Dデジタルカメラで記録された3D映像のファイルは独自形式となる。
[[ITmedia:http://plusd.itmedia.co.jp/lifestyle/articles/0809/24/news100.html]]
それは激しく抗議したいかも
JPEG2枚使って、関連付けデータはコメントとして記録すれば十分なのではないかしらん?
将来、OSが変わって、ドライバなどのソフトが使えなくなって、写真データが扱えなくなったら困っちゃいますし。
HDRイメージに変換できるRAWフォーマットなどが使えるなら、それはそれでうれしいですが。
[/pukiwiki]