会社のお昼休み〜。

gifを透明にしたいのですが、
>「透明になるとか、そういう情報を入れたブロック」
の対策をしたソースを書いたので、載せます。
動作確認は家で。。w

<?php
/**
 * Created on 2008/12/26
 * (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"];
  $clearcolorindex = 29;	// パラメタ
  $fp = fopen($imgpath,"rb");
  $c = fread($fp,4);
  $src .= $c;
  $c = fread($fp,1);

  if(ord($c) === "7"){	// GIF87aである(Graphic Control Extensionなし)
    $src .= pack("c",9);	// ヘッダをGIF89aにする

    while(ord($c) !== 0x2c && !feof($fp)){// GIF HeaderをImage Block開始まで送る
      $c = fread($fp,1);
      $src .= $c;
    }

    // Graphic Control Extensionを付ける
    $src .= pack("ccc",0x21,0xf9,0x04);
    $src .= pack("c",1)	// 透過
    $src .= pack("cc",0,0);	// 表示する際の遅延時間
    $src .= pack("c",$clearcolorindex);	// 透過色のインデックス
    $src .= pack("c",0x00);	// Graphic Control Extension終了

    $src .= $c;	// Image Block開始位置まで送ったので付ける

  } else {	// GIF89aである
    $src .= $c;
    // Graphic Control Extension調整
    while(ord($c) !== 0x21 && !feof($fp)){	// 拡張ブロック開始まで送る
      $c = fread($fp,1);
      $src .= $c;
    }
    $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);	// 表示時間(ポインタを送る)
      $src .= pack("c",$clearcolorindex);	// 透過色のインデックス
      fread($fp,1);	// 送り
    }
  }
  while(!feof($fp)){
    $src .= fread($fp,1);
  }
  header("content-type:image/gif");
  print($src);
}
?>

次は、アニメーションgif対策(画像のブロックが何度も出てくるもの)だっ!