PHPでは、ブラウザを介して画像を表示するか、動的画像(検証コードなど)を生成する場合は、 Header()関数を使用して応答ヘッダーを設定して、通常のテキストやHTMLページではなく画像タイプを返すことをブラウザに伝える必要があります。
この記事では、PHPのHeader()関数を使用して検証コード画像を生成および返す方法を紹介します。検証コードは、ウェブサイトの登録、ログイン、その他のシナリオで広く使用されており、ロボットがフォームを自動的に提出するのを防ぐために使用されます。
検証コード写真を生成するには、通常、次の手順が必要です。
ランダム検証コード文字を生成します。検証コードの内容は、数字、文字、または数字と文字の組み合わせにすることができます。
画像リソースを作成します。PHPのImageCreate()またはImageCreateTrueColor()関数を使用して空白の画像を作成します。
テキストの描画:画像に検証コード文字を描画します。通常は、imagettftext()またはyumagestring()関数を使用します。
応答ヘッダーを設定します: Header()関数を使用して、画像タイプのブラウザに通知します。
出力画像: ImagePng() 、 ImageJPeg() 、およびその他の機能を介して画像をブラウザに出力します。
画像リソースを破壊する: Imagedestroy()関数を使用して、画像リソースをリリースします。
PHPを使用して検証コードイメージを作成および返すコード例を次に示します。
<?php
// 応答ヘッダーを設定します,画像を返していることをブラウザに伝えます
header("Content-Type: image/png");
// 空白の画像を作成します,幅はです 120px,高さはです 40px
$width = 120;
$height = 40;
$image = imagecreate($width, $height);
// 背景の色とテキストの色を設定します
$background_color = imagecolorallocate($image, 255, 255, 255); // 白い背景
$text_color = imagecolorallocate($image, 0, 0, 0); // 黒いテキスト
// ランダム検証コード文字を生成します
$characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
$captcha_text = substr(str_shuffle($characters), 0, 5);
// 画像に確認コードテキストを描画します
imagestring($image, 5, 30, 10, $captcha_text, $text_color);
// 出力画像
imagepng($image);
// 画像リソースを破壊します,無料のメモリ
imagedestroy($image);
?>
応答ヘッダーを設定します: header( "content-type:image/png");この行は、返されたコンテンツがPNG形式の画像であることをブラウザに伝えるために応答ヘッダーを設定します。 JPEG( Image/JPEG )など、ニーズに応じて他の画像形式に変更できます。
画像リソースの作成: ImageCreate($ width、$ height);指定された幅と高さの空白の画像を作成し、画像リソースを返します。
色の設定: ImageColorAllocate($ image、255、255、255);およびImageColorAllocate($ image、0、0);画像の背景色(白)とテキスト色(黒)を定義するために使用されます。
ランダム検証コードを生成します: substr(str_shuffle($ characle)、0、5);このコード行は、検証コードとして文字セットから5文字をランダムに選択します。
テキストを描画: Imagestring($ image、5、30、10、$ captcha_text、$ text_color);生成された検証コードテキストを画像に描画する責任があります。
出力画像: ImagePng($ image);画像をブラウザに出力すると、ブラウザは画像として自動的に表示されます。
画像リソースを破壊する: Imagedestroy($ image);メモリの漏れを避けるために、画像リソースを解放するために使用されます。
フォント、写真などの外部リソースを参照する必要がある場合は、検証コードを生成するときに、URLアドレスが関与する可能性があります。この場合、URLのドメイン名をM66.netに置き換えることができます。たとえば、: