IO_SWF 2.3.0 をリリースしました

(前回、bitmapAlpha2PNG という新機能を追加したので 2.3.0 にするつもりが忘れてました。)

プレマルチファイドアルファの考慮を入れました。

ChangeLog

  • swfextract 等で JPEGPNG を抽出するときの、プレマルチファイドアルファへの配慮

- 意図せず輪郭が黒くなる場合には、これで治る可能性が高いです

  • swfreplaceactionstrings.php で複数の入れ替えが同時にできるようにした。
  • bitmapAlpha2PNG の最後に imagedestroy 入れました (リークしてました)

コード

    static function bitmapAlpha2PNG($bitmapdata, $bitmapalpha) {
        $im = imagecreatefromstring($bitmapdata);
        $width = imagesx($im);
        $height = imagesy($im);
        imagesavealpha($im, true);
        imagealphablending($im, false);
        $i = 0;
        for ($y = 0 ; $y < $height ; $y++) {
            for($x = 0 ; $x < $width ; $x++) {
                $c = imagecolorat($im, $x, $y);
                $rgba = imagecolorsforindex($im, $c);
                $red   = $rgba['red'];
                $green = $rgba['green'];
                $blue  = $rgba['blue'];
                if ($i < $bitmapalpha_len) {
                    $alpha = ord($bitmapalpha[$i++]);
                } else {
                    $alpha = 255;
                }
                if ($alpha > 0) {
                    $red   = min($red   * 255 / $alpha, 255);
                    $green = min($green * 255 / $alpha, 255);
                    $blue  = min($blue  * 255 / $alpha, 255);
                }
                $alpha_gd = 127 - $alpha/2;
                $i++;
                $color = imagecolorallocatealpha($im, $red, $green, $blue, $alpha_gd);
                imagesetpixel($im, $x, $y, $color);
            }
        }
        ob_start(); // ---- stdout to memory
        imagepng($im);
        $pngdata = ob_get_contents();
        ob_end_clean(); // ----
        imagedestroy($im);
        return $pngdata;
    }