ホームページ >バックエンド開発 >PHPチュートリアル >PHP_PHP チュートリアルの点トレース法を使用して中国語を「描画」する
著者: LuciferStar 出典: Beyond PHP 序文: 現在、インターネットサーフィンを好む人がますます増えており、自分の個人ホームページを持つ人が増えています。さまざまな自動化ソフトウェア ツールの登場により、Web ページの作成はますます簡単になりました。しかし、特撮が普及してきたため、斬新なものは少なくなっています。もしかしたら、ある日、ウェブサイト上のカウンターがあなたのものとまったく同じであることに気づくかもしれません。ウェブページはますます成熟しています。ウェブページ上にはますます多くのものがあり、ますます豊かになっています。 質問: Web ページにカウンターを追加したい場合: 以前は、スペースプロバイダーに行ってリンクを要求するか、他の場所からアドレスをコピーしていましたが、これらは常に他の人によって行われます。 you are 発言力のない人は、一つ一つ見つけていくしかない。 Web ページで、何らかの情報を公開したいとします。情報がテキストの場合は、新しいページを作成してリンクを追加します。データの場合は、新しいページを作成してリンクを追加します。ただし、データが頻繁に更新される場合は、 1 時間ごと、1 分ごとに変更される可能性があります。コンピューターの前にいて、常に変更したりアップロードしたりする気はありますか? (私たちは商業的な Web サイトではありません。誰もあなたのためにお金を出してくれません。) 掲示板、チャット ルーム、フォーラム、これらは HTML と JAVASCRIPT だけでは実現できません。 より自動制御を実現するために、CGI (Common Gateway Interface) プログラムを使用してこれらの機能を実装できます。 ソフトウェア要件: PHP: GD Library は、PHP をサポートするサーバーを構成します。私はカウンターやリアルタイムのデータ統計と公開に OmniHTTPd Professional を使用しており、画像を使用して行うことができます。画像内にテキストを出力します。 PHP で画像を作成し、その上にポイント コンテンツを表示するための基本的な手順は次のとおりです: 上の例では、400×300 の画像上に、ポイント (10, 10) から開始して 12 ポイント「1234567890」を描画します。 」。この画像のサイズが 251 バイトであることに気づきましたか?他の出力形式を試すこともできます。 画像のサイズは画像内の非背景ピクセルの数に関係し、出力されるピクセル数とは関係ありません。 ただし、問題があります。 imagestring() を使用すると、次の情報を出力できます: imagestring($im,1,0,0,"abcdefghijklmnopqrstuvwxyz0123456789~!@#$%^&*()_+{}|:"?[];,。 / ",$red); しかし、中国語を正しく出力できません!!! imagestring($im,1,0,0,"Ah",$red); 表示されているものは間違いなく中国語ではありません!! これは文字化けしたコードです。 PHP デフォルトの文字セットは UTF-8 で、簡体字中国語は GB2312 です。 この問題を解決するには、PHP に拡張モジュール php_iconv.dll (UNIT の下のサフィックス名は .SO) をロードさせます。ただし、場合によっては、テストコードをアップロードする予定でしたが、今回はエラーを避けるためにアップロードしませんでした。致命的なのは、スペース サービスが拡張モジュールを無効にしている場合、またはロードされたモジュールの DL() 関数を無効にしている場合、幸いなことに、中国語を事前にバイバイする方法は他にもあります。文字マッピングを通じて変換します。しかし、すべての漢字を手で描いてみませんか? 簡単な関数については中学校で習ったことがありますか?ある点の座標を計算し、隣接する 2 つの点を接続するこの方法は、できるだけ多くの点を計算して、対応する座標に表示することを知っていますか。プリンタとドットマトリクス 中国語の文字を出力するとき、特定の色の点の関数は次のとおりです: int imagesetpixel (resource image, int x, int y, int color) とします。座標 (100,100) に白色点を表示したい場合、必要なのは次のコードだけです: つまり、特定の漢字のすべての点の情報を取得する限り、この関数を通じてその漢字を出力できます。 。ファイルchs16.fonには、国家標準の位置コード表(国家標準の情報交換用漢字エンコーディング基本文字セットGB-2312)が保存されています。漢字用のドットマトリクスフォントライブラリです。 (WIN98 システムでは、このファイルは c:windowscommand の下にあります。UNIX システムで使用する場合は、大文字と小文字に注意してください。そうでない場合は、記事の最後にリンクがあります。) MSDOS時代ですが、まあ、やはり物は取り出して使うべきですね。 chs16.fonからは漢字の格子データを読み込むことができます。各漢字は 16 × 16 のドットで構成されます。ストロークが通過する場合、ポイントの値は 1 で、それ以外の場合は 0 になります。各ポイントは 1 ビットを占め、8 ポイントごとに 1 バイトが構成されます。すると、漢字は (16×16÷8=32) バイト必要になります。 以下の例は、文字ドットマトリクスの表現方法を説明するためのものです。 ここでは、文字 C を示す 8×8 行列が定義されています。白い正方形は 0 で表され、黒い正方形は 1 で表されます。次に、これら 8 行のグラフィックのコードは次のとおりです。 行の 2 進数は 16 進数を表します。 0 00000000 0x00 1 00111110 0x3E 2 01110000 0xE0 3 01110000 0xE0 4 01110000 0xE0 5 01110000 0xE0 6 00111110 0x3E 7 0 0 x00 これらの点を出力するには、最初に 1 番目の線を描画し、次に 2 番目の線、3 番目の線を描画する必要があります。 . 最後の行まで。 ループを使用します: for($hang=0;$hang "場所コード" をインデックス付けして検索します。前述したように、中国語の文字はテーブル内で 32 バイトを占めるため、32 要素の配列を定義します。 $buffer=配列(0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0 ,0,0, 0, 0,0,0,0, 0,0); 次の質問は、特定の文字がファイルのどこに保存されているかということです。中国語の文字は 32 バイトを使用し、GB-2312 ロケーション コード テーブルには 94 行 94 列があるため、テーブル内の文字の番号を知って、それに 32 を乗算するだけで済みます。したがって、オフセットを定義します: $offset =(94*($qh-1)+($wh-1))*32; $qh は領域 (qu) を表し、$wh はビット (wei) を表します。PHP は 0 からカウントを開始するため、位置が見つかった場合は、fseek() 関数を使用してコード テーブル内の位置を設定し、$buffer に 32 バイトを読み取るだけで済みます。また、中国語は 2 バイトで構成されているため、前のドット マトリックスの例で示したようになります。は 8 ビット、1 バイトなので、ドットを描画するコードを変更する必要があります。 for($hang=0;$hang