GIFで遊んでみました

2007/2/28

思いつきで、任意の色のGIFアイコンを作るPHPスクリプトを作ってみました。 GDやGIFのライブラリがサーバ機能として用意できない時などに使えるかも知れません。 でも、恐らくあまり実用性は無いと思います。 まあ、お遊びということで。。。

スクリプトを作った方法は、かなりAd-hocで無理矢理です。 GIFはインデックスカラー方式なので、カラーマップのRGBを置き換えるプログラムを書いてみました。 絵が同じで色だけが違う2種類のGIF画像を用意して、「od -t x1 filename.gif」をそれぞれに対して行い、色の部分を割り出して、RGBの値を変更できるようにしました。 本来ならばGIFのフォーマットを良く見ながら全部作るべきですが、面倒だったのでかなり手抜きをしてみました。

で、作ったのが以下のプログラムです。 色を0〜255の数値で指定して「OK」を押すとアイコン画像が任意の色に変更されます。 面倒だったので背景色は白固定です。 カラーマップの背景色部分を変更するようにプログラムを改変すれば任意の背景色を出すようにできます。


r=, g=, b=

ソースコードです。 3分コーディング物なので品質は低いです(言い訳)。 必要に応じて改変してください。



<?php

$r = $_GET["r"];
$g = $_GET["g"];
$b = $_GET["b"];

if (!is_int($r) || !is_int($g) || !is_int($b)) {
  header("500 Server Error");
}

if ($r < 0 || $g < 0 || $b < 0 ||
    $r > 255 || $g > 255 || $b > 255) {
  header("500 Server Error");
}

header("Content-Type: Image/Gif");

$gifdata = pack("C*", 
  0x47 , 0x49 , 0x46 ,
  0x38 , 0x37 , 0x61 ,
  0x0f , 0x00 ,
  0x0f , 0x00 ,
  0x80 , 0x01 , 0x00 ,
  $r, $g, $b,
  0xff , 0xff , 0xff ,
  0x2c , 0x00 , 0x00 , 0x00 , 0x00 , 0x0f , 0x00 , 0x0f ,
  0x00 , 0x00 , 0x02 , 0x1d , 0x84 , 0x1d , 0xa9 , 0x7b ,
  0xb8 , 0xdf , 0xc0 , 0x83 , 0x6d , 0xb2 , 0x6a , 0x6d ,
  0xcc , 0x69 , 0x73 , 0x9f , 0x81 , 0x1a , 0xa6 , 0x88 ,
  0x93 , 0x49 , 0x1d , 0x5c , 0x80 , 0x5e , 0x2a , 0x57 ,
  0x00 , 0x00 , 0x3b
);

print $gifdata;

?>


参考

もう少し真面目に作りたい方は、「GIFフォーマットの詳細」などがお勧めです。

最近のエントリ

過去記事

過去記事一覧

IPv6基礎検定

YouTubeチャンネルやってます!