ここで GD ライブラリについて「話している」とはあえて言いません。私は GD を 1 回か 2 回しか使用したことがなく、ほとんどの機能にはまだ触れていないからです。しかし、Sanbuzhu Xiaodiao が熱心に私に原稿を書いてほしいと頼んだので、私は弾丸を噛んで自分の経験のいくつかを書く以外に選択肢はありませんでした。それが出発点として役立つことを願っています。
実際、Web ページで「グラフ」効果を実現するために必ずしも GD を使用する必要はありません。より簡単な解決策はヒストグラムです。これは HTML で解決できます。例:
<? $b = 配列(150,110,125,180,160,175,230,220);
<html>
<頭>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<タイトル></タイトル>
<スタイル>
<!--
td{ font-size:9pt }
-->
</スタイル>
</head>
<本文>
<テーブルボーダー=0>
<tr valign="bottom"> /* (1) */
<?for($i=0;$i<8;$i++) { ?><td align="center">
<table height="<?echo $b[$i];?>" border=0> /* (2) */
<tr>
<td bgcolor="#3F7F9F" width="40"></td> /* (3) */
</tr>
</table><br><font color="#3F7F9F"><?echo $b[$i];?></font> /* (4) */
</td><?>
</tr>
</テーブル>
</body>
</html>
<? $b = array(150,110,125,180,160,175,230,220); これはデータの集合であり、全体的な状況とは関係がありません。コードについては、1 つずつ説明していきます。
(1) ここで注目すべきは valign="bottom" で、セルの内容を下揃えにします。 <tr> に追加する理由
毛織物?すべての <td> で指定しなくても、テーブル内のこの行の内容をこの配置に従うようにできます。
このようにして、PHP の実行によって生成される HTML ページの元のコードは数十バイトを節約できます。視聴者の貴重な時間を節約します。
(2) 注意、最も重要なのはここです! <table height="xxx">、テーブルの高さ属性を使用して、
さまざまな高さの「柱」を実現します。誰にでもはっきりとわかるように、元のデータは比例的に拡大縮小されていません。
データが特に大きいか小さい場合、テーブルの高さ属性に直接割り当てるのは適切ではなく、状況に応じて割り当てる必要があります。
データは適切にスケーリングする必要があります。たとえば、データ セット内の各数値が 3000 ~ 8000 の間になると推定します。
25 倍に縮小することを検討できます。つまり、height="<? echo Floor(b[$i]/25); ?>" です。
(3) この行に、シリンダーの色 (RGB) である bgcolor="#xxxxxx" を記述します。実際、実際のヒストグラムは次のようになります。
コードをできるだけ単純にするために、各シリンダーに色を使用します。そのため、これを使用することはできません。
各シリンダーには色が割り当てられます。 ——実際には、この例では特に書く必要はありません。
初心者を混乱させる色を抽出する機能。したがって、その部分を完璧にできるかどうかはあなた次第です。
(4) ここでは実際のデータがバーと同じ色で表示されます。もちろん、この番号をシリンダーの上部に置くこともできます。
、おそらくより専門的です。しかし、私はまだそれを下に置くことに慣れています。
HTML テーブルを利用して、さまざまなヒストグラムを作成することができます。この例では、bgcolor を使用してカラー ブロックを表示します。
さらに、background="(picture)" を使用することもできます。画像はパターン化されているため、ヒストグラムの列にはパターンが表示されます。
また、上記の注 (3) に示した <td> で実際のデータを非常に対照的な色で表示すると、非常に良い効果が得られます。
上記は GD を回避する有効な方法ですが、複雑なグラフィックスを作成したい場合は GD を使用する必要があります。
悲しいことに、PHP4の中国語マニュアルでは、GD関数ライブラリには44個の関数があると書かれていますが、最新版の英語のPHP4マニュアルを見てみると、
すでに 80 を超える GD 関数があります。著者の英語が下手なので、英語のマニュアルを読んでも推測しかできないので、新しい GD ライブラリが再び GIF をサポートするかどうかはわかりません。とにかく、私たちは完全に無料の PHP を使用しているのに、なぜ著作権で保護された GIF を「危険を冒して」使用する必要があるのでしょうか?無料で PNG を使用してみませんか?アニメーションが必要ない限り、PNG は GIF と同じくらい小さなファイルを作成することもできます。
次にプログラムを組み合わせて、よく使われるこれらの GD 関数を 1 文ずつ説明していきます。
最初から始めましょう。
<?
Header("コンテンツタイプ: image/png");
// これは HTTP ヘッダーを送信してブラウザに「聞いてください、これは画像です。テキストとして表示しないでください!」と伝えます。
// 個人的な好みにより、PNG を使用しました。 もちろん、Header("Content-type: image/gif"); を使用することもできます。
// または Header("Content-type: image/jpeg");
$im = ImageCreate (50, 100);
// 画像を作成します。画像フォーマットは作成時に割り当てられていないことに注意してください。
// ImageCreate 関数、2 つのパラメーター、間違いなく、これは作成されたイメージの幅と高さです。
// 戻り値は int 値です。この値は非常に重要です。この画像を描画し続けます。
// この画像を出力するまで、この値はどこでも使用されます。これを画像の ID と呼びます。
// 使用頻度が高いので、短い名前の変数に代入します。
// それでは線を引いてみましょう。線画機能はこんな感じです。
// イメージライン (int im, int x1, int y1, int x2, int y2, intcol);
// 最初のパラメータ im は画像の ID で、その後に x1、y1、x2、y2 が続きます。言うまでもなく、
// 始点(x1,y1)と終点(x2,y2)の座標です! (画像の左上の座標は(0,0)です)
//最後のパラメータは何ですか?それは色です! GD では、画像の色を定義し、これらの定義された色を使用して描画する必要があります。
// なぜ画像の色を定義する必要があるのでしょうか?私の推測では、GIF、PNG、その他の画像の「パレット」として使用されていると思います。
// これには画像自体の知識が関係するため、ここでは詳しく説明しません。
//したがって、線を描く前に、最初に色を定義する必要があります (これは非常に面倒です)。
// $col_red = ImageColorAllocate($im, 255,192,192);
// この関数には 4 つのパラメータがあり、最初の $im... 毎回言う必要がありますか?次は言わないよ!
//次の 3 つのパラメータは、定義する色の赤 (R)、緑 (G)、青 (B) コンポーネントで、範囲は 0 ~ 255 です。
// これにも物理光学の知識が関係します。赤、緑、青の三原色の光の成分が異なり、
// 常に変化する色を生成します。上で定義した色は、赤 255、緑 192、青 192 です。
// 私の記憶違いでなければ、これはもっと明るい赤です。早速、線を引いてみましょう。
// なぜしばらく待つのですか?なぜなら、絵が一色だけだと何も見えないからです。
// まずは背景を黒くしましょう!
// マニュアルには明示されていませんが、最初に定義した色がデフォルトで背景として使用されることがわかりました。
$col_black = ImageColorAllocate($im, 0,0,0);
// 色を定義します。赤色光、緑色光、青色光はありません。それは自然に黒です。
// 次に、線の描画に使用する色を定義します。
$col_red = ImageColorAllocate($im, 255,192,192);
// これで、赤い線の描画を開始できます。
イメージライン ($im, 10, 20, 45, 85, $col_red);
// 心配しないでください。この文を読み終えると画像は表示されなくなります。
画像PNG($im);
// この文は画像を出力します。ImagePNG() は png 画像を出力し、ImageJPEG は jpeg 画像を出力します。
// ImageGIF 出力 gif 画像...
// ファイルに保存する代わりに画面に表示する場合は、ここにパラメータがあることを忘れないでください。
// このパラメータ (保存されたファイル名) を省略します。ファイルとして保存したい場合は、
// 次のように記述する必要があります: ImagePNG($im,"test.png");
// パスが指定されていない場合、このファイルは Web の現在のディレクトリに保存されます。
// JPEG の場合、パラメータがもう 1 つあり、JPEG 品質 (0 ~ 100) です。
// 画面上に表示したい場合は ImageJPEG($im,"",80);
// 保存する場合はImageJPEG($im,"test.jpg",80);
// この画像をファイルとして保存する場合は、
// 画像を意味する HTTP ヘッダーを送信するために Header("Content-type: image/png") を使用することはできません。
// これが起こると、画像を出力することになるためです。
ImageDestroy($im);
// メモリ内のイメージを破棄してメモリ領域を解放します。
// 以上で、最も単純な GD 描画が完了しました。
// テストにより、PNG 形式で生成された画像ファイルには 131 バイトしかないことが判明しました。
// JPEG 形式を使用すると、最悪の品質 (0) を使用した場合でも 855 バイトが必要となり、画質が悪すぎて表示できません。
// 最高の JPEG 品質には 2360 バイトが必要ですが、それでも色は PNG を使用したときほど鮮やかではありません。
// 色数が少ないこの種の画像の場合、PNG を使用した方が JPEG よりもはるかにコスト効率が高いことがわかります。
?>
今回はここまでにして、できるだけ早く続きを書いていきたいと思います。