These pages are written by only Japanese.
|
Namazu for hns による簡易全文検索です。 詳細は 詳細指定/ヘルプをご参照下さい。 |
||||||||||||||||||||||||||||||||||||||||||||||
PHP 5.3.0 で使えますかとの質問に対して、
動かした事がないので、まだ未対応って事で。と答え、課題として持ち帰っていたので調査。
./configure --prefix=/home/yoya/tmp/php530 make install cp php.ini-development /home/yoya/tmp/php530/lib/php.iniphp.ini を設定
でもって、以下の3行を追加 extension_dir = "/home/yoya/tmp/php530/lib/php/extensions/no-debug-non-zts-20090626/" enable_dl = On extension=swfed.so
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^)/
<?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 してます。
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.なんだそうです。割った数をかけても元に戻りません。
次のファイルは互換ではありませんとしてハネられます。
% 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こんなファイルがあるとします。※フィクションです
My Documents\CravingExplorer\download\walkman\以下に出来てるので、それを MediaManager for WALKMAN にドロップします。
上記では、ファイルからオープンした jpeg データの先頭に [0xff, 0xd9, 0xff, 0xd8].pack(”C*”) の4Byteの文字列を付加していますが、 これは SWF File Format Specification にも記載されている接頭子(マーカー)になります僕の知る限りでは、
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.うぁぁ… (´Д`;)
DefineBit2JPEG2のJPEG完取り込みパターンはなぜこんな仕様かー。との声がありましたので、自分なりに推測してみました。 事実と又聞きと憶測が入り混じってます。