• class SWFEditor function replaceBitmapData($image_cond, $bitmapdata, $alphadata = null, $opts = array())

※ 0.42 から対応。

※ 色指定は 0.56 以降でご利用下さい。(0.55 までは雛形に完全透明ピクセルが含まれると機能しない不具合があります)

説明

SWF バイナリ中の画像をビットマップ画像(JPEG,PNG,GIF の3種に対応)で差し替えます。

SWF バイナリ中の差し替えたい画像を(image_id 以外にも)画像の縦横サイズや色(RGB)といった条件でも指定出来ます。

引数

  • int or mixed $image_cond (SWF 内のコンテンツ毎にふられた ID、又は画像サイズと色の組み合わせ)
    • int の場合は image_id
    • mixed の場合は width, height, red, green, blue (任意のパラメータを省略可能)の連想配列。
  • string $bitmapdata (ビットマップ画像ファイルのデータ)
  • string $alphadata (透明度情報。この引数は省略可能)
  • boolean $without_converting or mixed $opts; (オプション指定, この引数は省略可能) swfed-0.49 以降から使えます。
  • boolean $without_converting
    • これが true の場合、(SWFv8 以降の仕様に則っとり) PNG/JPEG/GIF のデータを変換せずに JpegTag に格納します。
  • mixed $opts = array('without_converting' => true/false, 'rgb15' => true/false);
    • without_converting は 0.49 以前のと同じ機能です。省略時は false です。 *rgb15 は RNG24 が渡された場合に 15bit color として保存します。省略時は false です。

戻り値

  • boolean $result (true:成功, false:失敗)

使用例

例1(image_id)

  1. <?php
  2. $swf = new SWFEditor();
  3. $swf->input($swfdata)
  4. $image_id = 7;
  5. $swf->replaceBitmapData($image_id, $bitmapdata);
  6. header('Content-type: application/x-shockwave-flash');
  7. echo $swf->output();
  • image_id 7 番の画像を $bitmapdata の画像に差し替える。

例2(image_cond)

  1. <?php
  2. $swf = new SWFEditor();
  3. $swf->input($swfdata)
  4. $image_cond = array('width' => 100, 'red' => 255);
  5. $swf->replaceBitmapData($image_cond, $bitmapdata);
  6. header('Content-type: application/x-shockwave-flash');
  7. echo $swf->output();

* 横幅 100 で RGB の R が 255位の画像を $bitmapdata の画像に差し替える

備考

  • 色指定は SWF 内に Lossless(PNG か GIF)で入っている画像のみ対象です。(JPEG は対象外)
  • 色は単色の画像を使って下さい。(今は左上のピクセルを参照しますが、変わる可能性があります)
  • 色指定する場合、SWF 内の Lossless 画像の zlib 圧縮を解くので、処理が重た目です。
  • 色でも画像サイズでも良い場合は、なるべく画像サイズで指定する事をお勧めします。
  • 色は±10の誤差を許容する判定をします。(実際、Adobe CS Flash で埋めた際に2~5程度の誤差が生じる事があるので)
  • 複数の画像が条件に合致した場合は、どれか一つだけ画像が入れ替わります。
  • でないと、SWF の初めの方で条件に合致する画像があっても、全部の画像をチェックしなければならず。意図的にサボってます。

参考

関連