These pages are written by only Japanese.

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

こんばんわ♪ 現在は3月28日(木)19時37分。 晩御飯のメニューが楽しみです


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

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

2008年01月20日(日)

Flash SWF バイナリいじり (CWS)

これ の続き

chara.swf:

某19人の flash を dump してみた。
swf_file->header.file_length(18432) != ftell(binfp->fp) (117635)
header magic=CWS
header version=6
header file_length=0x4800(=18432)
movie header alignc=15
movie header min(125, 581) - max(1302, 469)
movie header frame_rate =188.54
movie header frame_count =0x501(=1281)
[0] tag=788(Unknow) length=53
うーむ。ボロボロ。
magic が CWS の場合は file_length フィールドのすぐ後ろから zlib 圧縮がかかっていて、その後ろのバイナリを伸張する処理が必要らしい。 さて、どう作ろうかな…
今のところ、ちまちまファイルストリームから必要な時に吸い出すように作ってるけど、 全データをバッファに吸い出してから処理するように作り変えた方が楽な気もする。
大きなサイズの Flash を諦める事になるけど。そこは妥協で。

追記 (2009/10/07):

「cws zlib」でたどり着く事があるようなので、まとめを作りました。

FireFox の表示文字改善

読むのが罰ゲームになるんじゃないかって位に文字が汚かったけど、 以下のページを読んで解決。ありがとう。ありがとう。(⊃д⊂) これで、IE と同じ表示になりました。(って事は、FireFox はこの設定見てないのか…)
参考にしたページはメイリオフォントについて話しているが、 メイリオフォントを使ってない(はずの)ページでも効果があってラッキー。 …ていうか。 普通に書いてあった。(´Д`;)

ついでに、自分のページでメイリオ指定:

diary/<テーマ名>/theme.ph
BODY {
	<略>
        font-family:メイリオ;
pukiwiki/skin/default.css
body
{
	<略>
        font-family:メイリオ, "Trebuchet MS", arial, helvetica, Sans-Serif;
メイリオが普通になったら外さないとダメだけどね。これ。 その次のフォントが出た時、邪魔になるし。

XPでVista搭載フォント"メイリオ"を使う(&文字幅はMS Pゴシックと同じに)-MeiryoKe_PGothic

すばらしすぎる…
Windows を使ってるって事を忘れそうな位、文字が読みやすくなりました。
使用前 (MS ゴシック)使用後 (メイリオ改)
使用前 (MS ゴシック)と使用後 (メイリオ改)

東京地方、今夜から降雪予報 交通障害に注意 気象庁

明日、無事に会社に辿りつけますように… (・人・)

2008年01月21日(月)

Flash SWF 編集 (PHP編)

C 言語で作った JPEG 差し替えツールを PHP に移植しようとしたら、 既に似たような事をやってる人を発見。 これはヘッダを編集するだけっぽいので、これを拡張するか、 自前でスクラッチから作るかちょっと迷う。 (データ構造的に試したいアイデアがあるので、スクラッチから作る可能性が高いけど)

追記 (2008/07/24):

↓こちらにまとめがあります。

「若い人ほどネットにハマる」は本当か? (イギリスの調査)

「物心ついたときからネットがあるんだから、さぞかし上手に使いこなしているのだろう」
というようなステレオタイプは、それほど正しくはないというレポートが発表されました:
年寄りの独断でサービスを作るのを避ける為に、 若者の傾向を予想してバイアスをかけたのに、 それ自体が間違えてるって事もあるので、 この手の定量的な調査は重要ですね。

2008年01月22日(火)

Flash SWF 編集 (PHP 移植)

適当に移植してみた。 とりあえず、ブロックに分割するところまで。
(tag & length の分割で少しハマった、LE とビットストリームのあわせ技なので、少し分かりにくい)

追記:

「JPEG ブロック分割」で検索して辿りついた方がいらしたので追記。

ヤッターマン公式BBSが削除の嵐 (主題歌問題)

炎上を誘ってるとしか思えないこの暴挙…

謎はてブ


そしてとても興味深いのは、300人くらいのはてブユーザーが、
タイトルに釣られて内容見ずにブックマークしてるってことだよね。
(おそらく、後で見る人が殆どだから)
ここから言えるのは、芸能雑誌の見出しが内容に即していないものでも
効果を上げるのと同じく、はてブも(というかネット記事も)そのタイトルが
いかに大げさで内容に即していないものでも、(少なくとも技術系のページでは)
一定の効果を上げるということだね。
共有ブックマークの一つの限界かもしれません。

コメント欄:

じゃあ何がいいの?って言ってると結局そういう指摘をする人が
いなくなっちゃうんじゃないですかね?
うーん。これは微妙。

ついでに:

考える前にやるべきことの前にやるべきことは考えること

考える前にやるべきことがあるだろ へのツッコミとしては不適切な感じを受けるが、言ってる事自体にはうなずける。
材料をむやみに集めてもゴミの結果しか出ないしね。
考える前にその材料を十分集める必要があるけど、その材料の集め方自体(どんなデータをどんな風に)をまず考えないといけない。って事。

2008年01月23日(水)

Flash SWF 編集 (PHP 移植)

あまりに適当すぎたのでコードをブラッシュアップ。
結構綺麗に書けたつもり。
CWF 対応なので試しに chara.swf を分解してみたけど、 ブロックの分解がまだバグってるっぽい。
tag=SetBackgroundColor(9) length=3
tag=JPEGTables(8) length=574
tag=DefineBitsJPEG(6) length=-103
tag=341 length=20
tag=521 length=58
tag=931 length=39
tag=End(0) length=0
movie header と SetBackgroundColor(9) までは想定通りなので 伸張はうまくいってるはずで、多分、 JPEGTables の tag_and_length の 構造が特殊なのか、そもそも自分が誤解してるのかって所か。
マイナスなので、そもそもビットストリーム処理でシクってる可能性も…

追記 (2009/08/04):

マイクロソフト、2月12日にIE6からIE7への強制アップグレードを予定

もうそろそろですねぇ…

巻き取り式ディスプレイ付き携帯、2008年半ば発売へ

かっこよすぎ…
実際に使ってみないと実用的かは分からないけど。

2008年01月24日(木)

Flash SWF パース (PHP編)

Tag ブロックの処理を Factory パターンで書き直してみた。
static function Factory(&$ibs) {
        $tag_and_length = $ibs->getBytesLE(2); // important
	$tag = $tag_and_length >> 6;
<略>
	$tagclass = @ self::$_tagClassTable[$tag];
	if (! empty($tagclass)) {
	      require_once("FlashSWF/TagBlock/$tagclass.php");
	      $classname = $classname . '_' . $tagclass;
	}
	$block = new $classname($tag, $length, $rawdata);
	return $block;
}
function __construct($tag, $length, $rawdata) {
	$this->_tag = $tag;
	$this->_length = $length;
	$this->_rawdata = $rawdata;
}
こんな感じで。

BitStream 処理見直し:

getLEBytes (LittleEndian で値取得)の処理がおかしかったので修正。
 php swftest.php chara.swf
	<略>
tag=SetBackgroundColor(9) length=3
tag=JPEGTables(8) length=574
tag=DefineBitsJPEG(6) length=31897
        jpeg id=1
	<略>
tag=DoAction(12) length=2
tag=ShowFrame(1) length=0
tag=End(0) length=0
完璧だ… (2^31 以上の値の扱いはとりあえず制限事項で…)
2^31 を超えた値はないのに、(そんな大きなデータを扱い気はないし) 計算途中で 2^31 を超えた値を保存する事があり、 php の整数は unsigned ではないので、マイナスの値におちて おかしな事になっていた。
計算途中でも越えていたのは単に手抜きだったからなので、さくっと修正。

さて…:

次はファイル出力を作ろっと。

今日のブックマーク

面倒なのでこっちでまとめ。

2008年01月25日(金)

Flash SWF ファイル出力 (PHP 編)

BitStream の処理を色々と見直したら SWF ファイルを出力する所まで出来た。
% php swftest.php saitama.swf
% md5sum saitama.swf  output.swf
b4b4698958e961336389dd421b671157  saitama.swf
b4b4698958e961336389dd421b671157  output.swf
完全に元通り :) php は型が分かりにくいので、ビット処理は結構大変でした… (ブラッシュアップしなきゃなので、過去形じゃない訳ですが…)

課題:

  • ファイルサイズの更新処理を追加 (入れ忘れ)
  • CWS の時に圧縮する処理を追加 (入れ忘れ)
  • 画像入れ替えで遊んでみる (そもそもの目的)
  • ブラッシュアップ (特に BitStream のコードが微妙)
とりあえず、1 つ目を直さないと使い物にならないので、さっさと直そう。
画像入れ替えについては、↓これの変換処理を考えないと…

ming を入れてみる

./configure:

configure
./configure
<略>
Config summary:
  C++ enabled
  Perl extension disabled
  PHP extension disabled
  Python extension disabled
  Tcl extension disabled
  ZLIB enabled (-lz)
  Freetype library enabled (/usr/bin/freetype-config)
  GIF library disabled
  PNG library enabled (-lpng)
色々負けてるな…
よいしょっと。
# yum install giflib-devel
./configure --enable-perl --enable-php
<略>
Config summary:
  C++ enabled
  Perl extension enabled
  PHP extension enabled
  Python extension disabled
  Tcl extension disabled
  ZLIB enabled (-lz)
  Freetype library enabled (/usr/bin/freetype-config)
  GIF library enabled (-lungif)
  PNG library enabled (-lpng)
よし…

2008年01月26日(土)

Flash SWF 画像入れ替え(PHP 編)

前回の課題のうち、ファイルサイズの更新処理と CWS の圧縮処理を入れて、 JPEG画像入れ替えまで実装してみた。

CWS の圧縮で問題発生:

PHP Warning:  gzuncompress(): buffer error in /home/yoya/prog/flash/FlashSWF.php on line 42
google で探しても解決した例が見つからないので、php のソースを読んでみた。
(yum で PHP 5.1.6 (cli) を使っているが、)とりあえず最新版の 5.2.5 を取得。
php の中にはメッセージがない
% pwd
/home/yoya/src/php-5.2.5
% grep "buffer error" * */* */*/*
%
zlib の中を探す
% grep "buffer error" *.c
zutil.c:"buffer error",        /* Z_BUF_ERROR     (-5) */
zutil.c (メッセージを定義してる場所)
const char * const z_errmsg[10] = {
"need dictionary",     /* Z_NEED_DICT       2  */
"stream end",          /* Z_STREAM_END      1  */
"",                    /* Z_OK              0  */
"file error",          /* Z_ERRNO         (-1) */
"stream error",        /* Z_STREAM_ERROR  (-2) */
"data error",          /* Z_DATA_ERROR    (-3) */
"insufficient memory", /* Z_MEM_ERROR     (-4) */
"buffer error",        /* Z_BUF_ERROR     (-5) */
"incompatible version",/* Z_VERSION_ERROR (-6) */
""};

#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)]
compress.c (実際に出力する場所)
     compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
   memory, Z_BUF_ERROR if there was not enough room in the output buffer,
   Z_STREAM_ERROR if the level parameter is invalid.
	<略>
   if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
    err = deflate(&stream, Z_FINISH);
    if (err != Z_STREAM_END) {
        deflateEnd(&stream);
        return err == Z_OK ? Z_BUF_ERROR : err;
伸張する時に長さを指定するけど、 実際に伸張したらその長さを超えちゃったってだけか…
つまり、ファイル長フィールドの更新に失敗してると… ○rz
chara.swf と(それを read して write した) output.swf はファイルサイズが同じなんだけど。(そうなるように圧縮率を調整したし)
* chara.swf

  addr :  0 1  2 3  4 5  6 7  8 9  A B  C D  E F  0123456789ABCDEF
0x00000: 4357 5306 0048 2c00 789c 9cb9 6b5c 5259  CWS  H, x   k\RY
                   ~~~~~~~~
* output.swf addr : 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF 0x00000: 4357 5306 a86f 2800 789c 9cb9 6b5c 5259 CWS o( x k\RY ~~~~~~~~
確かに駄目だ

圧縮失敗の原因:

if ($magic == 'CWS') {
	movie_and_body = gzcompress($movie_and_body, 6);
}
<略>
$this->_header['filelength'] = strlen($header_without_length) + 4 + strlen($movie_and_body);
えーっと… ファイル長フィールドには 伸張した時のファイルサイズを入れないと駄目なのに、 圧縮後のファイルサイズを入れてました…
そりゃ、伸張した時にバッファも足りなくなるさ… ○rz
$this->_header['filelength'] = strlen($header_without_length) + 4 + strlen($movie_and_body);
<略>
if ($magic == 'CWS') {
	movie_and_body = gzcompress($movie_and_body, 6);
}
こうしないと。

問題 (chara.swf から吸い出した画像が表示できない):

  • saitama.swf の画像吸出し成功、表示も出来る。
  • chara.swf の画像吸出せたが、ビューアで表示できない。(;_;
  • saitama.swf の画像入れ替え成功
  • chara.swf の画像入れ替えも成功 (DefineBitsJPEG3 は未対応 alpha フィールドがよく分からないので…)
先頭 0x10 分を見る限り問題ない JPEG 画像に見えるので長さが足りないか、 途中のどこかを壊してるかってとこだけど、調べるの面倒そう。

課題:

  • chara.swf の画像抽出処理を見直す
  • JPEG 画像の SWF 仕様への変換を考える。
  • もう少しブラッシュアップ
  • 異常系を考える (とりあえず FlashSWFException 実装するか…)
  • デバッグ機能を入れる (動作確認をしやすいように)

追記 (2009/01/18):

追記 (2009/09/09):

ming 導入

まずはコードを取得。current で。
cvs -z3 -d:pserver:anonymous@ming.cvs.sourceforge.net:/cvsroot/ming co -P ming
↑こちらを参考にインストール。

jpeg patch:

まずは、JPEG パッチ *1 を当てる。(flash lite 実行環境は画像フォーマットに好き嫌いがあるので、その対策らしい)
$ wget http://auicon.freeownhost.com/pc/dev/ming/jpeg.c.diff
$ patch -b jpeg.c jpeg.c.diff
patching file jpeg.c
Hunk #1 succeeded at 129 (offset 6 lines).
Hunk #3 succeeded at 310 (offset 11 lines).
ちなみに -b は backup オプション。
(2008/07/25 追記) パッチを公開していたサーバがアクセスできなくなっているので、↑代わり
ついでに JPEG に関するまとめ。↓

configure:

%  ./autogen.sh
Running aclocal -I macros
Running libtoolize --automake
./autogen.sh: line 15: libtoolize: command not found

  Something went wrong, bailing out!
むー。libtool 入ってなかったか…
yum install libtool
./configure
<略>
Config summary:
  C++ enabled
  Perl extension disabled
  PHP extension disabled
  Python extension disabled
  Tcl extension disabled
  ZLIB enabled (-lz)
  Freetype library enabled (/usr/bin/freetype-config)
  GIF library disabled
  PNG library enabled (-lpng)
色々負けてる…
# yum install giflib-devel
# exit
% ./configure --enable-perl --enable-php
<略>
Config summary:
  C++ enabled
  Perl extension enabled
  PHP extension enabled
  Python extension disabled
  Tcl extension disabled
  ZLIB enabled (-lz)
  Freetype library enabled (/usr/bin/freetype-config)
  GIF library enabled (-lungif)
  PNG library enabled (-lpng)
よし…
% make
	<略>
% su
Password:
# make install
	<略>

さて php で…:

によるとコンパイル手順は、
    mkdir <phpdir>/ext/ming
    cp php_ext/* <phpdir>/ext/ming
    cd <phpdir>
    ./buildconf 
    ./configure --with-ming <other config options>
なんだけど、php を yum で入れてるのでどうしよう…
php 自体もいい加減(5.1.6)古いので、これを機会に入れなおそうかとも思うけど、 yum upgrade 対象外になるのは後々、面倒そう。う~む…

php-5.1.6 ツリー上でコンパイル:

yum で入れた php に config オプションはあわせて、 php-5.1.6 のソースをコンパイルしてみた。
php -i | grep Configure
Configure Command =>  './configure' '--build=i686-redhat-linux-gnu'
<以下略>
php -i | grep Configure > ../php-config-option.txt
vi ../php-config-option.txt
sh ../php-config-option.txt
<略>

環境整備:

色々とヘッダが足りなくてエラーが…
checking for PCRE support... yes
configure: error: Could not find pcre.h in /usr
checking for BZip2 in default path... not found
configure: error: Please reinstall the BZip2 distribution
checking for db4 major version... configure: error: Header contains different version
checking for GNU MP support... yes
configure: error: Unable to locate gmp.h
configure: error: Cannot find rfc822.h. Please check your c-client installation.
configure: error: Cannot find ldap.h
configure: error: Cannot find MySQL header files under /usr.
Note that the MySQL client library is not bundled anymore!
checking for ncurses support... yes, shared
checking for unixODBC support... configure: error: ODBC header file '/usr/include/sqlext.h' not found!
not found
configure: error: Cannot find libpq-fe.h. Please specify correct PostgreSQL installation path
checking for sqlite3 files in default path... not found
configure: error: Please reinstall the sqlite3 distribution
checking for PSPELL support... yes
configure: error: Cannot find pspell
configure: error: SNMP sanity check failed. Please check config.log for more information.
必要に応じて -devel パッケージをインストール
# yum install pcre-devel
# yum install bzip2-devel
# yum install db4-devel
# yum install gmp-devel
# yum install libc-client-devel
# yum install openldap-devel
# yum install mysql-devel
# yum install ncurses-devel
# yum install unixODBC-devel
# yum install postgresql-devel
# yum install sqlite-devel
# yum install aspell-devel
# yum install net-snmp-devel

configure (--with-ming で失敗):

さて、php-config.txt に --with-ming を付け足してと…
% sh ../php-config-option.txt
make
ming は php に入ってるのでそのまま。
/home/yoya/src/php-5.1.6/ext/ming/ming.c:2104: error: too many arguments to function 'newSWFMovie'
/home/yoya/src/php-5.1.6/ext/ming/ming.c:2106: error: too many arguments to function 'newSWFMovie'
/usr/local/ に current の ming が入っているので微妙か…
% cd ext/ming/ ext/ming.orig
% cp -r ~/src/flash/ming/php_ext/* ext/ming/.
% sh ../php-config-option.txt
% make
<略>
ext/ming/.libs/ming.o: In function `zif_ming_useSWFVersion':
/home/yoya/src/php-5.1.6/ext/ming/ming.c:121: multiple definition of `zif_ming_useSWFVersion'
ext/ming/.libs/ming.o:/home/yoya/src/php-5.1.6/ext/ming/ming.c:121: first defined here
ext/ming/.libs/ming.o:(.data.rel+0x0): multiple definition of `ming_module_entry'
ext/ming/.libs/ming.o:(.data.rel+0x0): first defined here
collect2: ld returned 1 exit status
駄目か…

configure (--enable-ming で成功):

sh ../php-config-option.txt (--with-ming を --enable-ming に変更)
make
<略>
Build complete.
(It is safe to ignore warnings about tempnam and tmpnam).
やはり…

インストール:

% cd ext/ming;
% sh make_module.sh
% mv ext/ming/tmp/modules/ming.so /usr/lib/php/modules/.

動作確認:

<?php
dl('ming.so');
ming_useswfversion(4);
$swf = new SWFMovie();
$swf->setDimension(640, 480);
$swf->add(new SWFBitmap(fopen('/home/yoya/prog/flash/image1.jpg', 'rb')));
$swf->save('sample.swf');
?>
成功。
% cat > /etc/php.d/ming.ini
; Enable ming extension module
extension=ming.so
^d

。。。:

↓こっち参考にして作業すればよかった… (⊃д⊂)

*1: 詳細や JPEG パッチの cache はこちら。
http://pwiki.awm.jp/~yoya/?Flash/JPEG

スパムメールを送って得られる月収は77万円-108万円

スパマー全員シネバイイノニ
背後に怖い人達がいるんでしょうけど…

2008年01月27日(日)

Illustrator から Flash CS3 に画像をコピー

Illustrator 形式のカッコいい画像 が配布されてたので Flash CS3 の画面にコピーしてみたら、
「ビットマップとしてペーストする」と「AIファイルインポータ環境設定を使用してペースト」
の選択肢が出てきて、

「ビットマップ」を選べば大丈夫かと期待したけど、
パブリッシュ時に
Flash Lite 1.1 Player でサポートされていない機能を使用しています
と警告がでて、実際に画像が表示できなかった。

リソースをチェックすると確かに ai 形式のまま取り込んでいるみたいなので、 Illustrator 側で予めビットマップに落としてからコピーしないとダメなのかな。
「ビットマップとしてペーストする」って何してるんだろ。(・ω・)

近所の図書館

隣駅の範囲まで図書館を回ってきた。
どの図書館でもそうだったけど、 年配のおじさん達がとにかくウザイと改めて思った。
(数少ない)席に座って本読まずに寝てたり、 本を読んでる人も鼻息が荒くてうるさかったり、(←本棚ひとつ距離置いても目立つ位)
クシャミするのはいいけど唾飛ばしてきて、こっちの顔にかかるし、
浮浪者っぽい格好の人もいるし、 格好はおいといても 3m以内に近寄ると鼻が曲がりそうな匂いがするし…
公共の場なので、ある程度は仕方ないんだけど、 団塊の世代の方々はマナーがなってないなと愚痴りたい…
(まともな人は土日に家族サービスとかしてて、 こういう所には居ないのかもしれないけどね…)

愚痴はおいといて:

色々とネタ集めに奔走してみて、色々とやりたい事もみつけたので、 まだ頑張れそう(何が?)な気がする。
後半、AppleII の本を見つけてずっとそれ読んでて、 昔のゲームが沢山載ってて、ちょっと懐かしくなった。
自分も、もう年だなぁ…

Excelマクロで弾幕シューティング「DEX-EV」

こういうの見ると自分は Excel が使えますとか、面接とかで主張できないなぁ… ↓これといい、Excel の底力には感動さえ覚えます。

実際に遊んでみて:

本当に本格的なシューティングゲームでした。SUGEE !
ただ、オプション>セキュリティ>マクロセキュリティで、 セキュリティレベルを中に落とさないと動かないので面倒。 (マクロなので当然だけど)
署名がない場合でも設定を変えずに特定ファイルをその場で指定して、 マクロを有効にする方法とかないのかな。
後で設定を戻し忘れた場合を考えると、セキュリティ設定はなるべく変えたくないし。

プレゼンや映像製作に使えるお手軽な原稿表示ツール

以前、携帯でカンペシステム作ったらウケないかなと数名に話した事があるけど、 PCでは当然のように、とっくに実装されてたようで。^^;
今度、携帯 flash で作ってみるか。

「単純に並べるだけ」じゃないインターフェース(Badoo)

こういう工夫はいいよね。センスを感じる。
頭の固い上司がいると、統一感がないとかで却下されそうだけど。(´Д`;)

CSSとPHPできれいなグラフを描く方法

グラフツール使うの面倒で、HTML で棒グラフを書いた事は何度かあるけど、 これだと、きちんとしたグラフっぽい。今度使おw

2008年01月28日(月)

イリーナ女史、堪忍袋の緒が切れた欧米の生命科学者に引導を渡されるの巻

GMO が怖いと不安を煽るのは百歩譲って我慢するとして
でっちあげに近い実験結果を使って危険だと主張するのは さすがにまずいだろうに…

買ってはいけないのか:

ここからリンクされている「買ってはいけないのか」のページが結構いい感じですが
既になくなっているので代わりに cache ページの URL を張っておきますね :-)

昨今の疑似科学批判ってなんか浅薄だなと思う。:

この記事自体が軽薄な雰囲気を(多分わざと)出してるせいか、 コメントが賑わっていて楽しくなってます。

2008年01月29日(火)

Flash SWF 画像抽出デバッグ

chara.swf で画像吸出しに失敗している原因を調査中
HugFlash で吸い出せたので、その結果と比較してみた。 0x07ed1 - 0x07c97 = 23A ほどサイズが違うのと、マーカーの並びが違う。 一般のツールで表示できない怪しい形式なのかな。

どう壊れているか:

ImageMagick の identity でチェック
% identify ~/prog/flash/image1.jpg
identify: Quantization table 0x00 was not defined `/home/yoya/prog/flash/image1.jpg'.
%
というわけで、QUANT マーカーが無いか壊れているか。なんだけど。
% pwd
/home/yoya/src/ImageMagick-6.3.8
% grep -r "was not defined" .
%
ImageMagick には無いので多分、libjpeg
% pwd
/home/yoya/src/jpeg-6b
% grep -r "was not defined" .
./jerror.h:JMESSAGE(JERR_NO_HUFF_TABLE, "Huffman table 0x%02x was not defined")
./jerror.h:JMESSAGE(JERR_NO_QUANT_TABLE, "Quantization table 0x%02x was not defined")
%
見つけた。
% grep JERR_NO_QUANT_TABLE *
jcdctmgr.c:      ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, qtblno);
jcmarker.c:    ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, index);
jctrans.c:      ERREXIT1(dstinfo, JERR_NO_QUANT_TABLE, tblno);
jdinput.c:      ERREXIT1(cinfo, JERR_NO_QUANT_TABLE, qtblno);
jerror.h:JMESSAGE(JERR_NO_QUANT_TABLE, "Quantization table 0x%02x was not defined")
むぅ… どれだ…

困った時の swftools 頼み:

swftools-0.8.1/src/swfextract.c
void handlejpeg(TAG*tag)
{
    char name[80];
    char*filename = name;
    FILE*fi;

    sprintf(name, "pic%d.jpg", GET16(tag->data));
    if(numextracts==1) {
        filename = destfilename;
        if(!strcmp(filename,"output.swf"))
            filename = "output.jpg";
    }
    /* swf jpeg images have two streams, which both start with ff d8 and
       end with ff d9. The following code handles sorting the middle
       <ff d9 ff d8> bytes out, so that one stream remains */
    if(tag->id == ST_DEFINEBITSJPEG && tag->len>2 && jpegtables) {
        fi = save_fopen(filename, "wb");
        fwrite(jpegtables, 1, jpegtablessize-2, fi); //don't write end tag (ff,d
8)
        fwrite(&tag->data[2+2], tag->len-2-2, 1, fi); //don't write start tag (f
f,d9)
        fclose(fi);
    }
なるほど… 普通のビューアで見ると END マーカーが途中にあると、 その後ろにある QUANT タグが見れないまま終了しちゃうと。
外す処理が必要って事ね。逆に取り込む時は、END マーカーを先頭の 方に入れてやら無いと Flash としては表示を保障できないと。

ソフトバンク922SH「インターネットマシン」詳細

スマートフォンと携帯の合いの子みたいな感じかな…

伸び悩むウェブサービスの三大疾患

あー。あるあr <ピーー …検閲削除>

これで、10 日分だよ〜。

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