めんどかった

 
gifファイルを透明にしようと思いました。
単純に、「透明フラグ」を書き換えたら済む話かと思ったら
「透明になるとか、そういう情報を入れたブロック」がないgif画像もあるらしく、
下のソースだとうまく透過されなかった。
 
今度書き換えます。

<?php
/**
 * Created on 2008/12/25
 * (c) mana
 */

if(!isset($_FILES["img"])){
  print '<html>
  <body>
  <form enctype="multipart/form-data" action="#" method="POST">
  <input type="file" name="img">
  <input type="submit">
  </form>
  </body>
  </html>';
} else {
  $imgpath = $_FILES["img"]["tmp_name"];
  $fp = fopen($imgpath,"rb");
  do{
    $c = fread($fp,1);
    $src .= $c;
    if(ord($c) === 0x21){	// 拡張ブロック固定値
      $c2 = fread($fp,1);
      $src .= $c2;
      if(ord($c2) === 0xf9){	// Graphic Control Extension固定値
      	$src .= fread($fp,1);	// 固定値
      	$c3 = fread($fp,1);
      	$c3 |= 1;	// 透過する
      	$src .= $c3;
      	$src .= fread($fp,2);	// 表示時間(ポインタを送る)
        $clearcolorindex = 29;	// パラメタ
        $src .= pack("c",$clearcolorindex);
        fread($fp,1);	// 送り
        print("tootteru");
      }
    }
  }while(!feof($fp));
  header("content-type:image/gif");
  print($src);
}?>