These pages are written by only Japanese.

Welcom to My Diary.com
最新の日記タイトル一覧カテゴリ別タイトル一覧トップへ戻る〜

おはようございます♪ 現在は3月29日(金)9時34分。 今日も頑張りましょう。


hns - 日記自動生成システム - Version 2.19.5 (色々 Fixed)

先月 2009年09月 来月
1 2 3 4 05
06 7 8 09 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Namazu for hns による簡易全文検索です。
詳細は 詳細指定/ヘルプをご参照下さい。
検索式:

2009年09月13日(日)

[swfed] PHP 5.3.0 で動作実験

PHP カンファレンスで SWF Editor の発表をした際に、
 PHP 5.3.0 で使えますか
との質問に対して、
動かした事がないので、まだ未対応って事で。
と答え、課題として持ち帰っていたので調査。
結果としてはソースいじらずに、そのままコンパイルできて、そのまま動きました。
5.2.x の extension のインターフェースがそのまま使えるんですね。素敵。
以下は検証記録 (root権限を使わない検証方法)

PHP 環境準備:

php-5.3.0 を持って来てコンパイル
./configure --prefix=/home/yoya/tmp/php530
make install
cp php.ini-development  /home/yoya/tmp/php530/lib/php.ini
php.ini を設定

でもって、以下の3行を追加
extension_dir = "/home/yoya/tmp/php530/lib/php/extensions/no-debug-non-zts-20090626/"
enable_dl = On
extension=swfed.so

swfed インストール:

export PATH=/home/yoya/tmp/php530/bin:$PATH
phpize
./configure --with-zlib --with-png --with-gif
make install

動作結果:

% php -v
PHP 5.3.0 (cli) (built: Sep 13 2009 22:25:03)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies
% php swfdump.php  ~/flash/loveplus/player_01.swf
magic=CWS  version=9  file_length=175589
rect=(0, 0)-(194, 300) (f_size=14)
frame_rate=12.0  frame_count=1
[0] tag=FileAttributes(69)  length=4
[1] tag=SetBackgroundColor(9)  length=3
[2] tag=Unknown(86)  length=15
[3] tag=Unknown(82)  length=103941
[4] tag=DefineShape(2)  length=33
[5] tag=DefineSprite(39)  length=16
[6] tag=DefineBitsLossless2(36)  length=1229
        image_id=3  format=5  width=45  height=45
        argb bitmap exists
[7] tag=DefineShape2(22)  length=299
[8] tag=DefineSprite(39)  length=16
[9] tag=DefineSprite(39)  length=62
[10] tag=Unknown(76)  length=70
[11] tag=DefineBitsJPEG2(21)  length=69689
        image_id=7  jpeg_data_size=69687
                SOI(0xD8): len=0
                APP0(0xE0): len=14
                APP12(0xEC): len=15
                APP14(0xEE): len=12
                DQT(0xDB): len=130
                SOF0(0xC0): len=15
                DHT(0xC4): len=416
                SOS(0xDA): len=69055
                EOI(0xD9): len=0
[12] tag=DefineShape2(22)  length=84
[13] tag=PlaceObject2(26)  length=6
[14] tag=PlaceObject2(26)  length=20
[15] tag=ShowFrame(1)
[16] tag=End(0)
\(^O^)/ 念の為に、JPEG 抽出も
% php swfgetjpegdata.php chara.swf 1 | strings  | head -1
JFIF
<< \(^O^)/ \(^O^)/ \(^O^)/

トラブルシューティング:

Q. dl('swfed.so') すると dl(): Dynamically loaded extensions aren't enabled
A. php.ini に enable_dl = On を追加すれば直る
Q. dl('swfed.so') すると Temporary module name should contain only filename
A. php.ini に extension_dir = <swfed.so のあるディレクトリ> を追加すれば直るかも

2009年09月14日(月)

[swfed] swfimagedump

Sazesaki さんの記事( id:sasezaki:20090913 )を真似して
swfimagedump を書いてみました。
Jpeg に加えて Lossless 画像が png ファイルに落ちます。
<?php

if ($argc < 2) {
    fprintf(STDERR, "Usage: swfimagedump <swf_file>\n");
    exit(1);
}

$swf_filename = $argv[1];
$swfdata = file_get_contents($swf_filename);

$obj = new SWFEditor();
if ($obj->input($swfdata) == false) {
    fprintf(STDERR, "input failed\n");
    exit(1);
}

$tags = $obj->getTagList();
foreach ($tags as $k => $tag) {
    $tagName = $tag['tagName'];
    if (strncmp($tagName, 'DefineBitsJPEG', 14) == 0) {
        $detail = $obj->getTagDetail($k);
        $imageId = $detail["image_id"];
        file_put_contents($imageId.'.jpg', $obj->getJpegData($imageId));
    } elseif (strncmp($tagName, 'DefineBitsLossless', 18) == 0) {
        $detail = $obj->getTagDetail($k);
        $imageId = $detail["image_id"];
        file_put_contents($imageId.'.png', $obj->getPNGData($imageId));
    }
}
Iterator に慣れてない古い人間なので、とりあえず foreach してます。
実は、自分で作っておきながら getTagList の戻り値が foreach 出来るの知りませんでした。
Sazesaki さん有難う御座います。\(^O^)/

** 備考:

あと、SWF ファイルから画像を抜き出すときの注意なのですけど、
実は少なくとも DefineBitsLossless2 についてαチャネルに半透明( 0 より大きく 255 より小さな値)のデータを含む場合、
厳密には原理的に元画像を復元するすべがありません。
仕様書(swf spec ver10 の p154)によると、
BitmapPixelData ARGB[image data size] Array of pixel colors.

Number of entries is BitmapWidth * BitmapHeight. The RGB data
must already be multiplied by the alpha channel value.
なんだそうです。割った数をかけても元に戻りません。
詳しくは以前書いた日記で ↓

追記 (2010/12/17):

DefineLossless2 で検索して、この日記に辿り着いた方がいらっしゃるので。

2009年09月15日(火)

SONY の MP3 WALKMAN で動画を見る

随分前から SONY の MP3 ウォークマン (NW-A828)を使ってますが、
動画ファイルを転送するツール MediaManager for WALKMAN が全く使い物になりません。
キャプチャした動画や何処かから拾ってきた動画をこのツールに放り込むと、
次のファイルは互換ではありません
としてハネられます。
結構色んな動画フォーマットを試しましたが成功した事がありません。
QuickTime Pro で変換してフォーマットを総当たりで試すのも面白そうですが 何か負けてる気分。
という訳で、ツールを探しました。

Craving Explorer:

↓ これで解決 動画サイトからダウンロードするツールですが、 ローカルな動画ファイルにも対応しています。
例えば、
% ls -l
-rwxr--r-- 1 yoya devel 24854217  9月 12 01:06 BakeMonogatariOP10.mp4
-rwxr--r-- 1 yoya devel 23947431  7月 25 01:30 BakeMonogatariOP4.mp4
こんなファイルがあるとします。※フィクションです
Craving Explorer を起動して変換タブに、ローカルなファイルをドラッグ&ドロップします。
(何処かのタイミングで変換フォーマットを聞かれるので、WALKMAN を選択)

変換されたファイルが、
My Documents\CravingExplorer\download\walkman\
以下に出来てるので、それを MediaManager for WALKMAN にドロップします。
(Craving Explorer の変換フォーマット指定で自動登録を選ぶと、このドロップの手順は不要)
\(^O^)/ ※あくまでフィクションです

えーっと…:

ちゃんと、Blu-lay ディスク買うので許してっ。(謎
これないと生きてゆけない。><;

おふとんの乾きが遅い

ついでにお風呂をいれるのも時間がかかります。
秋を感じますね…
…と寝る時間が削られるので、対策しないと…

2009年09月16日(水)

帰りの電車で本気出す

帰宅中。電車の座席で隣のJCに寄り掛かられてる\^o^/
気持ちよく寝てもらえるように、腕の硬さや角度もろもろ 条件を全力で考えてサポート中。
生きてるとたまにはいい事もありますね。o(^-^o)(o^-^)o

あれ…反対側からおじさんに寄り掛かられてる。
優しく押し戻してと…(;´・`)

2009年09月17日(木)

SWF 内の JPEG マーカー

上記では、ファイルからオープンした jpeg データの先頭に 
[0xff, 0xd9, 0xff, 0xd8].pack(”C*”) の4Byteの文字列を付加していますが、
これは SWF File Format Specification にも記載されている接頭子(マーカー)になります
僕の知る限りでは、 という事情がありまして、頭に EOI, SOI(順番逆だし) をつければ良い訳ないじゃん。
確かに、携帯では頭に SOI, EOI をつければ表示できていたけど、たまたまだよね!
と思って、早速、仕様をチェックしました。
 The data in this tag begins with the JPEG SOI marker 0xFF, 0xD8 and
ends with the EOI marker 0xFF, 0xD9.
 Before version 8 of the SWF file format, SWF files could contain an
erroneous header of 0xFF, 0xD9, 0xFF, 0xD8 before the JPEG SOI marker.
うぁぁ… (´Д`;)
SWF v8 からですが、仕様に確かに明記されてます… ↑これでは、JPEG セグメント並び変えを真面目にやってるのですが、
それをサボるモードを作ってみようかしら。
JPEG をセグメント分割するにはバイト単位で scan する必要があるので、結構重たいんです。

SWF内のJPEG構造が変な理由を推測:

DefineBit2JPEG2のJPEG完取り込みパターンはなぜこんな仕様かー。
との声がありましたので、自分なりに推測してみました。 事実と又聞きと憶測が入り混じってます。
…といいますか、事情知ってる人いたら教えてw

2009年09月18日(金)

ノートPCの修理見積もり

PHPカンファレンス後に動かなくなったノートPCですが、
つい先程、ヨドバシから修理見積もりの連絡がきました。
11万超www
買ったばかりなのに出せるかーーw
異物が入っててボードを初め色んな部品が壊れてるって説明だったけど、
普段から面倒なの我慢してキーボードカバーしてキレイに使ってたのにーw

まぁ、ワランティはいってるので問題ないですけど… (*'-')

2009年09月19日(土)

鎌倉探索

北鎌倉駅 >> 円覚寺 >> 建長寺 >> 鎌倉アルプス >> 鎌倉宮 >> 鶴岡八幡宮 >> 鎌倉駅

円覚寺:

拝観料300円です。
昔の建物が沢山保存されていて見ごたえあります。

建長寺:

鎌倉アルプスへの通り道です。 拝観料(300円)は払います。

鎌倉アルプス:

アルプスと名がついてますが、ハイキングコースです。
健康な人なら、ジョギングして通り抜けできます。多分。

鎌倉宮:

偉い人の身代わりになって亡くなった人が 祭られてて、悪い事を肩代わりしてくれるそうです。
あと、お皿を割って厄払いするとこもあります。

鶴岡八幡宮:

結婚式やってました。

鎌倉駅:

鶴岡八幡宮から鎌倉駅の間の商店街 は活気があります。人がいっぱい。

これで、7 日分だよ〜。

タイトル一覧
カテゴリ分類
Database
JXTA
Java
XML
awm
bookmark
keyword
memo
news
research
Powered by hns-2.19.5, HyperNikkiSystem Project