These pages are written by only Japanese.

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

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


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

先月 2008年08月 来月
1 02
03 04 05 6 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年08月08日(金)

swfed 0.02 release

PNG 画像の吸出しに一部対応しました。 Lossless(可逆圧縮)画像の format は主に、3(index形式)と 5(bitmap形式)があり、 5 の bitmap 形式のみに対応しています。 3 は… 頑張ります。(;ω;)

サンプルコード:

$obj = new SWFEditor();
$obj->input($swfdata);
echo $obj->getPNGData($image_id);

実行結果:

% php swfdump.phps game.swf # format 5 の画像を探す
	<略>
[91] tag=DefineBitsLossless2(36)  length=58282
        image_id=72  format=5  width=155  height=156
        argb bitmap exists
	<略>
% php swfgetpngdata.phps game.swf 72 > test.png
透明度付きで吸い出せてます。(^o^)/

…:

という事はデータ構造の理解は正しいはずなので、 透明度付き PNG画像入れ替えに失敗しているのは、 libpng の使い方を間違えているかも。

libpng で PALETTE 形式を扱う方法

swfed の Lossless format=3 index 形式に対応する為、 libpng の PALETTE 形式の書き出し方を調査。
color_palette=(png_colorp)NewPtr(sizeof(png_color)*num_palette);

ctable=(*savePix)->pmTable;
HLock((Handle)ctable);
for (i=0; i<num_palette; i++)
{
	color_palette[i].red=((*ctable)->ctTable[i].rgb.red)>>8;
	color_palette[i].green=((*ctable)->ctTable[i].rgb.green)>>8;
	color_palette[i].blue=((*ctable)->ctTable[i].rgb.blue)>>8;
}
png_set_PLTE(write_ptr,write_info_ptr,color_palette,num_palette);
なるほど… パレットはこうして設定しつつ、 データ本体は
image_rows = malloc( image_height * sizeof( BYTE *) );
for( i = 0; i < image_height; i++ ) {
    dest = image_rows[ i ] = malloc( bmp_line_byts );
    src  = &bmp_data[ (image_height - 1 - i) * bmp_line_byts ];
    for( j = 0; j < bmp_line_byts; j++ ) {
        *dest++ = *src++;
    }
}
png_write_image( png_ptr, image_rows);
1 pixel 1 byte の生データを放り込むと。

(1008/10/09追記)
libpng について調べた事のまとめは以下の Wiki にあります。

swfed に適用してみました:

% php swfdump.phps game.swf # format=3 の画像を探す
	<略>
[44] tag=DefineBitsLossless2(36)  length=134
        image_id=34  format=3  width=62  height=18
        colormap_count=16  rgba colormap exists  indices exists
	<略>
% php swfgetpngdata.phps game.swf  34 > test2.png
パレット対応成功。(^o^)/
これで Lossless 対応はひと段落ついた感じです。

追記 (2009/10/23):

「swf lossless 2 RGBA」で検索して辿りついた方がいらっしゃったので。

PHP-4.0.0 build

温故知新、古きを知りて新しきを知るという事で、 4.0.0 を build してみました。

改造:

  • sapi 関連の変数 (sapi_module とか)が extern だったり static だったりするので、SAPI.h から衝突する extern を除いて、必要なファイルが各自で extern するよう改造。(apache 越しで動かなくなるかもだけど、言語検証用なので知らないw)
  • ext/libmysql が errno.h を include せずに errno を使うので mismatches non-TLS reference が発生。-include /use/include/errno.h で強制的に取り込ませて解決。

実験:

php-4.0.0% ./php
<?php
var_dump(microtime());
X-Powered-By: PHP/4.0.0
Content-type: text/html

string(21) "0.28143600 1218182721"
これが知りたかっただけです。^^;

swfed 0.04 release

PNG 画像抽出と PALETTE 対応のコードにメモリリークがあったので 治しました。

これで、1 日分だよ〜。

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