□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■ ------------------ CGI・3分クッキング ---------------------(^○^)~~ 発行日:1999年8月24日 毎週火曜と金曜発行 Vol.【014】 ●PR●━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ☆学校の授業や家庭学習、自由研究や調べ学習、エンターテインメントもお任せ。 ☆子供のための新型検索エンジン『JERFI(じぇるふぃ〜)』お試し下さい。 click< http://a.clickincome.net/md/dk?mid=75f2587e87ffc2d024315d65433e0425 > やりたいって言ったら、今すぐやりたいんだい!! いや〜んえっちぃ〜〜、、、じゃないよ、ゲームのお話し。 欲しいソフトが発売日に手元に届きます。こりゃええわい。 てなわけで、こちらにどうぞ。 http://takafumi.grabit.net/powersoft/ ⇔⇔Web新撰組News http://www.web-kyoto.com/ ⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔ 先日、1日休みをとってWeb新撰組恒例キス釣り大会を行いました。 おいしいキスで、もうトロトロのわたしでございます。 ⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔⇔ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━●PR● □■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■ 【今日の献立:正しい縦書きカウンター・その4】=========================   今回はgif画像処理用のライブラリgdについてのお話しです。   座標や色のデータを与えてgif画像を作ったり既存のgif画像ファイルを張り 合わせたりするのに便利なC言語用のライブラリがGDです。   gdは、http://www.boutell.com/、のFreewareコーナーにて配付されています。   1999年8月15日現在のバージョンは1.6.3ですが、今回私はバージョン1.2を 使用しました。よって、最新版とフォーマットが異る可能性があります。   何故1.2を使ったかと言いますと、GDはANSI C用のライブラリなのでこのまま ではK&RのCコンパイラではコンパイル出来ません。そこで以前にK&R用に改造した ものがあったのでそれを使う事にしたからです。   そのgd1.2は、こちらに置いてあります。   ftp://ftp.web-kyoto.com/pub/unix/gd1.2.tar.gz   K&Rにした、と言っても、関数宣言の()内から変数を取って、xxx(int a,intb){ なんてなってる所を片っ端からxxx(a,b) int a,b;{って書き換えただけです。よっ てコンパイル時にワーニングが出ますが、動くことは動きます。   gdの使い方ですが、詳しく説明してるとこれまた1ヵ月あっても足りないの で縦書きカウンターで使う部分のみを説明します。   今回は、エラー表示関数を作りながら、gdの解説をします。 ------------------------------------------- void hcounter_error(n) int n; { gdImagePtr im; int black,white,red,yellow; char num[16]; sprintf(num,"Error %d",n); -------------------------------------------   関数名はhcounter_errorとします。引数のnにはエラー番号を入れる事にします。   gdでのgif画像の変数型はgdImagePtrです。これで先ず変数を宣言しておきます。 変数名はimにしました。 gdImagePtr im;   色はint型になりますので、 int black,white,red,yellow;   となっています。最後のchar num[16];の変数numには、Error エラー番号、と いう文字列を入れます。 sprintf(num,"Error %d",n);   %dは10進数を表します。この場合は、numに、Error n(10進数で)という文字列 が代入されます。 ------------------------------------------- im=gdImageCreate(256,256); white=gdImageColorAllocate(im,255,255,255); black=gdImageColorAllocate(im,0,0,0); red=gdImageColorAllocate(im,255,0,0); yellow=gdImageColorAllocate(im,255,255,0); -------------------------------------------   次に、画像の下地を作ります。キャンバスみたいなもんだと考えて下さい。 im=gdImageCreate(256,256);   gdImageCreateは、指定した幅、高さの何も描かれていないgif画像を作成しま す。( )内は、幅、高さ(それぞれピクセル値)の順で指定します。この例の場 合は、縦横256ピクセルの画像を作って変数imに代入しています。   次に色を作成します。色は、r,g,b(それぞれ0から255までの整数)で指定しま す。 white=gdImageColorAllocate(im,255,255,255);   てな感じです。0,0,0にすると真っ黒になります。 ------------------------------------------- gdImageFilledRectangle(im, 0, 0, 255, 255, white); gdImageColorTransparent(im, white); gdImageArc(im,128,128,180,180,0,360,black); gdImageFillToBorder(im,128,128,black,yellow); gdImageArc(im,128,218,120,120,240,300,black); gdImageArc(im,96,96,20,20,0,150,black); gdImageArc(im,160,96,20,20,30,180,black); -------------------------------------------   ピースマークがちょっと悲しそうな顔をしている絵を描きます。   gdImageFilledRectangleは、指定したgif画像の中に塗りつぶしの矩形を描 きます。gif画像のx,y座標は、左上が(0,0)で、xの+方向は右、yの+方向は下に なります(普通のグラフなんかとy方向が逆なので注意して下さい)。   gdImageColorTransparentは指定した色を透明化します。   gdImageArcは円弧を描きます。指定する数値は、中心座標、高さと幅(この を変えると楕円になります)、開始角度と終了角度、です。   gdImageFillToBorderはその名の通り指定した色を境界にして塗りつぶしを します。この例では、さっき描いた丸を黄色で塗りつぶしています。 gdImageArc(im,128,218,120,120,240,300,black); gdImageArc(im,96,96,20,20,0,150,black); gdImageArc(im,160,96,20,20,30,180,black);   は、それぞれ口、左目、右目を円弧で描いています。 ------------------------------------------- gdImageString(im, gdFontGiant, 5, 5, num, red); if((n==200)||(n==210)){ gdImageString(im, gdFontMediumBold,10,20,"Can't open logfile",black); }else if(n==220||(n==230)){ gdImageString(im, gdFontMediumBold,10,20,"Can't open image file",black); }else{ gdImageString(im, gdFontMediumBold,10,20,"unknown error",black); } gdImageString(im, gdFontMediumBold,90,240,"(c)1998 Web-Shinsengumi",black); -------------------------------------------   gdImageStringは文字を描きます。 gdFontGiant, 5, 5, num, redはそれ ぞれ、フォント、開始座標、文字列、色を表しています。赤色で、Error 200とか 描いているわけです。 ------------------------------------------- printf("Content-type: image/gif\n\n"); gdImageGif(im, stdout); gdImageDestroy(im); exit(1); } -------------------------------------------   描画が終了しましたので、これをブラウザに表示させます。HTML文をCGI から表示させる時は、最初にContent-type: text/html\n\nをプリント文で送っ てやりますが、同じようにgifイメージを表示させる場合は、Content-type: image/gif\n\n を先ず送ります。 gdImageGif(im, stdout);   は、変数imのgif画像を標準出力に出力します。 gdImageDestroy(im);   出力が終わったので、変数imを開放してやります。 exit(1);   で、終了です。      次回は、4桁以下の計算関数を作ります。   だんだんわしだけの世界に入ってきたなぁ。。。と思いつつも、続く・・・ ===============================================================【続く】 リムネットなら旅行、グルメはもちろん、育児だって"ISIZE Club e"でおトク!   ■格安通販「PCアーケード」で今なら、一万円の商品券プレゼント■ click< http://a.clickincome.net/md/dk?mid=bed1559dd40fcea67c6439233c2ee3b1 > ---------------------------------------------------------------------- このメールマガジンは、 Subject部が、CGI3分クッキング【Vol.番号】は、まぐまぐ様にて、 ( http://www.mag2.com/ ) Subject部が、CGI3分クッキング Vol.【番号】は、Macky様にて、 ( http://macky.nifty.ne.jp/ ) Subject部が、CGI3分クッキング番号 は、Pubzine様にて、 配布致しています。 メールマガジンの解除について まぐまぐ様の解除は、 http://www.web-kyoto.com/dp/3min/ に、削除及び登録フォームを用意致しております。 Macky様の解除は、 http://macky.nifty.ne.jp/ を参考して下さい。 Pubzine様の解除は、 http://www.pubzine.com/srchid.asp?keyword=1379 に、削除及び登録フォームを用意致しております。 ---------------------------------------------------------------------- (^○^)/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 【お願い】 このマガジンについてのお問い合わせは、WEB新撰組メーリングリストで、 お願い致します。 参加方法は、 http://www.web-kyoto.com/ml/ を参考にして下さい。 はぎちゃんに対する質問・苦情は、このメールマガジンのリプライでどうぞ。 うら若きお嬢様の愛情も受け付けておりますが、おっさんなので話が通じない と思います。 【今回の担当】 WEB新撰組CGIプログラマー はぎちゃん(萩原 逸郎)でした。                 監修 組長(津田 羊子)&鷹(津田 貴史) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\(^○^)