6. 動的な画像の作成
サードパーティのライブラリ ファイルをインストールし、一定の幾何学的知識がある限り、PHP を使用して画像を作成および処理できます。実際、私は大学を卒業していないので、まだ PHP を使用して画像を作成できるため、これには幾何学の知識はあまり必要ありません。
基本的な画像作成機能を使用する前に、GDライブラリファイルをインストールする必要があります。 JPEG 関連の画像作成機能を使用する場合は、jpeg-6b をインストールする必要があります。画像内で Type 1 フォントを使用する場合は、t1lib をインストールする必要があります。
画像作成環境を確立する前に、いくつかの準備を行う必要があります。まず、t1lib をインストールし、次に jpeg-6b をインストールし、次に GD ライブラリ ファイルをインストールします。 GD をライブラリとしてコンパイルする際に jpeg-6b が使用されるため、インストールする際はここで指定した順序でインストールする必要があります。jpeg-6b がインストールされていないとコンパイル時にエラーが発生します。
これら 3 つのコンポーネントをインストールした後も、PHP を再構成する必要があります。これが、PHP のインストールに DSO を使用する理由の 1 つです。 make clean を実行し、次の内容を現在の構成に追加します:
--with-gd=[/path/to/gd]
--with-jpeg-dir=[/path/to/jpeg-6b ]
--with-t1lib=[/path/to/t1lib]
追加が完了したらmakeコマンドを実行し、その後make installコマンドを実行します。 Apache を再起動した後、phpinfo() を実行して、新しい設定が有効になっているかどうかを確認します。これで、イメージの作成作業を開始できます。
インストールされている GD ライブラリ ファイルのバージョンに応じて、GIF または PNG 形式のグラフィック ファイルを作成できる場合とできない場合があります。 gd-1.6 以前のバージョンがインストールされている場合、GIF 形式のファイルは使用できますが、PNG は作成できません。 gd-1.6 以降のバージョンをインストールすると、PNG ファイルは作成できますが、GIF 形式のファイルは作成できません。
簡単な画像を作成するには多くの機能を使用する必要もありますが、順を追って説明します。
この例では、PNG 形式で画像ファイルを作成します。次のコードは、作成された画像の MIME タイプを含むヘッダーです。
ImageCreate() を使用して空白の画像を表す変数を作成します。この関数にはピクセル単位の画像サイズのパラメーターが必要で、その形式は ImageCreate(x_size, y_size) です。サイズ 250X250 の画像を作成したい場合は、次のステートメントを使用できます:
$newImg = ImageCreate(250,250);
画像はまだ空白なので、何らかの色で塗りつぶすことができます。ただし、最初に ImageColorAllocate() 関数を使用して RGB 値を使用してこの色に名前を割り当てる必要があります。この関数の形式は ImageColorAllocate([image], [red], [green], [blue]) です。空色を定義したい場合は、次のステートメントを使用できます:
$skyblue = ImageColorAllocate($newImg,136,193,255);
次に、ImageFill() 関数を使用して画像をこの色で塗りつぶす必要があります。 ImageFill() 関数には、ImageFillRectangle()、ImageFillPolygon() など、いくつかの関数バージョンがあります。簡単にするために、次の形式で ImageFill() 関数を使用します:
ImageFill([image], [start x point], [start y point], [color])
ImageFill($newImg,0,0, $skyblue);
最後に、画像作成後に占有されていた画像ハンドルとメモリを解放します:
ImageDestroy($newImg) ?>画像の作成は次のようになります:
header ("Content-type: image/png")
$newImg = ImageCreate($newImg,136,193,255);
ImageFill($newI mg, 0,0,$skyblue);
ImagePNG($newImg);
?> このスクリプトファイルをskyblue.phpとして保存すると、ブラウザで見ると、スカイブルーの250X250のPNG形式の画像が表示されます。
画像作成機能を使用して画像を処理することもできます。たとえば、大きな画像を小さな画像に作成することもできます。
画像があり、そこから 35X35 の画像を切り抜きたいとします。必要なのは、35x35 の空の画像を作成し、元の画像を含む画像ストリームを作成して、サイズ変更した元の画像を新しい空の画像に配置することだけです。
このタスクを完了するための重要な関数は ImageCopyResize() で、次の形式が必要です: ImageCopyResize([新しい画像ハンドル],[元の画像ハンドル],[新しい画像 X], [新しい画像 Y], [元の画像 X ]、[元のイメージ Y]、[新しいイメージ X]、[新しいイメージ Y]、[元のイメージ X]、[元のイメージ Y])。
< /* ファイルに含まれるコンテンツ タイプをブラウザに知らせるためのヘッダーを送信します*/
header("Content-type: image/png") /* 新しい画像の高さを作成して保存しますと幅の変数*/
$newWidth = 35;
/* 指定された高さと幅で新しい空白の画像を作成します*/
$newImg = ImageCreate($newWidth,$newHeight) ;
/* 元の大きい画像からデータを取得します*/
$origImg = ImageCreateFromPNG("test.png")
/* サイズ変更された画像をコピーし、ImageSX(), ImageSY() を使用して元のサイズを取得します。 X と Y の画像*/
ImageCopyResize($newImg,$origImg,0,0,0,0,$newWidth,$newHeight,ImageSX($origImg),ImageSY($origImg))
/*希望の画像と解放メモリ*/
ImagePNG($newImg);
ImageDestroy($newImg) ?> この小さなスクリプトをresize.phpとして保存し、ブラウザでアクセスすると、 35X35 サイズの PNG 形式のグラフィックが表示されます。
7. PHP ベースのユーザー認証
各スクリプトでパスワード保護を実行したい場合は、header() ステートメント、$PHP_AUTH_USER および $PHP_AUTH_PW を使用して、基本的な認証スキーム、通常のサーバーベースの質問/応答を確立できます。シーケンスは次のとおりです:
1. ユーザーがサーバーにファイルをリクエストします。ファイルがサーバー上で保護されている場合、応答ヘッダーで 401 (許可されたユーザーを示す) 文字列がユーザーに返されます。
2. ブラウザがこの応答を受信すると、ユーザー名/パスワードの入力を求めるダイアログ ボックスが表示されます。
3. ユーザーはダイアログボックスにユーザー名とパスワードを入力し、「OK」ボタンをクリックすると、認証のためにサーバーに情報が返されます。
4. ユーザー名とパスワードが有効な場合、ユーザーがファイルを使用している限り、保護されたファイルは有効なままになります。
単純な PHP スクリプト ファイルは、ユーザー名/パスワード ダイアログ ボックスを自動的に表示させる適切な HTTP ヘッダーをユーザーに送信することで、HTTP 質問/応答システムを模倣できます。入力された情報は $PHP_AUTH_USER と $PHP_AUTH_PW に保存され、これら 2 つの変数を使用して、テキスト ファイルやデータベースなどに保存されているユーザー名/パスワードと比較できます。
この例では、認証に 2 つのハードコーディングされた値を使用していますが、ユーザー名とパスワードがどこに配置されても原理は同じです。 | 値、ダイアログボックスを表示させるヘッダーを送信します*/
header(WWW-Authenticate: Basic realm="My Private Stuff");
echo 認証が必要です. ;
exit;
} else if ((isset($PHP_AUTH_USER)) && (isset($PHP_AUTH_PW))){
/* 変数に値があるかどうかを確認します*/
if (($PHP_AUTH_USER != "validname") || ($PHP_AUTH_PW != "goodpassword")) {
/* 入力されたユーザー名とパスワードのいずれかが間違っている場合は、ダイアログ ボックスを表示させるヘッダーを送信します。 appeared*/
header(WWW-Authenticate: Basic realm="My Private Stuff");
header(HTTP/1.0 401 Unauthorized); echo 認可が必要です
} else if (( $PHP_AUTH_USER == " validname") || ($PHP_AUTH_PW == "goodpassword")) {
/* 両方の値が正しい場合、成功メッセージを表示します*/
echo "
あなたは許可されています!< ;/p>" ;
}
}
?>
ファイルベースの保護メカニズムを使用している場合、ディレクトリ内のすべてのファイルのセキュリティが保証されるわけではないことに注意してください。ほとんどのファイルを保護できる可能性がありますが、特定のディレクトリ内のすべてのファイルを保護できると考えている場合は、考え方を変える必要があります。
8. PHP と COM
冒険心があり、Windows 上で CGI、ISAPI、または Apache モジュール バージョンの PHP を実行している場合は、COM 機能にアクセスできます。さて、COM の詳細な説明は Microsoft や多くの分厚い書籍に委ねられています。COM の機能を簡単に理解するために、ここでは簡単な一般的なスクリプトを紹介します。
この PHP スクリプトは、バックエンドで Microsoft ワードプロセッサ Word を起動し、新しい文書を開いてテキストを入力し、文書を保存して Word を閉じます。
<
// 新しい COM コンポーネントを指すインデックスを作成します
$word = new COM("word.application") または die("Cant start Word!") // それを示しますis currently in use Word
のバージョン番号 echo "Loading Word, v. {$word->Version}
";アプリケーションを最前面で開くには、1 (true) を使用します
$word->Visible = 0;
// Word で新しいドキュメントを作成します
$ word->Documents->Add ();
// 新しいドキュメントにテキストを追加します
$word->Selection->TypeText("Testing 1-2-3...") // ドキュメントを Windows の一時ファイルに保存しますdirectory
$word->Documents[1]->SaveAs("/Windows/temp/comtest.doc");
//COM コンポーネントとの接続を閉じる
$word->Quit() ;
// 画面に追加情報を表示します
echo "ファイルを確認します..."
?>
http://www.bkjia.com/PHPjc/532574.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/532574.html