【PHP8.x】getimagesizefromstring関数の使い方
getimagesizefromstring関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
getimagesizefromstring関数は、画像データのバイナリ文字列からその画像に関する情報を取得する関数です。この関数は、画像ファイルとして実際に保存されているパスを指定するのではなく、メモリ上に存在する画像の生データ(バイナリ文字列)を直接解析します。具体的には、画像のピクセル幅、ピクセル高さ、画像のタイプ(例えば、JPEGやPNGなどを示す定数)、MIMEタイプ(例: image/jpeg)、そしてHTMLの<img>タグに直接使えるwidth="xxx" height="yyy"形式の文字列など、さまざまな情報が配列形式で提供されます。
同様の機能を持つgetimagesize関数が画像ファイルのパスを引数に取るのに対し、getimagesizefromstringは画像データそのものを文字列として受け取るため、画像を一時ファイルとして保存する必要がないという利点があります。これにより、データベースにバイナリデータとして保存されている画像を扱う場合や、ネットワーク経由で受信した画像をファイルシステムに書き出すことなく直接処理したい場合などに非常に便利です。無効な画像データが渡された場合や、PHPがサポートしていない形式の画像であった場合は、この関数はfalseを返しますので、必ず戻り値を確認してエラー処理を行うことが重要です。この関数は、効率的な画像データ処理を可能にし、アプリケーションのパフォーマンス向上に貢献します。
構文(syntax)
1getimagesizefromstring(string $image_data, array &$image_info = null): array|false
引数(parameters)
string $string, array &$image_info = null
- string $string: 画像データを含む文字列
- array &$image_info = null: 画像情報を格納するための配列 (参照渡し)
戻り値(return)
array|false
指定された文字列から画像ファイルのサイズ情報を取得します。成功した場合は画像の情報を含む配列を、失敗した場合は false を返します。
サンプルコード
PHP getimagesizefromstringで画像情報を取得する
1<?php 2 3/** 4 * 画像データ文字列から画像情報を取得し、コンソールに表示します。 5 * 6 * この関数は、外部ファイルに依存せず単体で動作するよう、 7 * Base64エンコードされた画像データをデコードして使用します。 8 * 9 * @return void 10 */ 11function displayImageSizeFromString(): void 12{ 13 // サンプルとして、1x1ピクセルの透過GIF画像のBase64エンコードされたデータ文字列を用意します。 14 $base64ImageString = 'R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'; 15 16 // Base64データをデコードして、バイナリの画像データ文字列に変換します。 17 // getimagesizefromstring() は、ファイルパスではなく、このバイナリデータを引数に取ります。 18 $imageData = base64_decode($base64ImageString); 19 20 // 文字列から画像情報を取得します。 21 // 成功すると画像の幅、高さ、MIMEタイプなどを含む配列が返ります。 22 // 失敗した場合は false が返ります。 23 $imageInfo = getimagesizefromstring($imageData); 24 25 // 取得結果をチェックし、成功か失敗かを表示します。 26 if ($imageInfo === false) { 27 echo '画像情報の取得に失敗しました。' . PHP_EOL; 28 } else { 29 // 取得した情報を分かりやすく表示します。 30 echo '画像情報の取得に成功しました。' . PHP_EOL; 31 echo '----------------------------' . PHP_EOL; 32 33 // $imageInfo[0] には幅(width)が格納されています。 34 echo '幅 (width) : ' . $imageInfo[0] . ' ピクセル' . PHP_EOL; 35 36 // $imageInfo[1] には高さ(height)が格納されています。 37 echo '高さ (height) : ' . $imageInfo[1] . ' ピクセル' . PHP_EOL; 38 39 // $imageInfo['mime'] にはMIMEタイプが格納されています。 40 echo 'MIMEタイプ : ' . $imageInfo['mime'] . PHP_EOL; 41 42 // $imageInfo[3] にはHTMLのimgタグで使える属性文字列が格納されています。 43 echo 'HTML属性 : ' . $imageInfo[3] . PHP_EOL; 44 45 // var_dump() を使うと、返された配列のすべての内容を確認できます。 46 echo '----------------------------' . PHP_EOL; 47 echo 'getimagesizefromstring() の戻り値全体:' . PHP_EOL; 48 var_dump($imageInfo); 49 } 50} 51 52// 関数を実行します。 53displayImageSizeFromString(); 54
このサンプルコードは、PHPのgetimagesizefromstring関数を使用して、文字列形式の画像データからその幅、高さ、種類などの情報を取得する方法を示しています。通常のgetimagesize関数がファイルのパスを指定するのに対し、この関数は変数に格納された画像データを直接扱える点が特徴です。
コードでは、まずBase64形式で表現された画像データをbase64_decode関数でデコードし、バイナリの画像データ文字列に変換しています。getimagesizefromstring関数は、このバイナリデータを第1引数として受け取ります。
関数の処理が成功すると、戻り値として画像の幅、高さ、MIMEタイプなどを含む配列が返されます。サンプルでは、返された配列からそれぞれの情報を取り出し、分かりやすく表示しています。一方で、引数の文字列が画像データとして正しくない場合など、情報の取得に失敗した際にはfalseが返されます。そのため、コードのようにif文で戻り値をチェックし、成功した場合と失敗した場合の処理を分けることが重要です。
この関数の引数はファイルパスではなく、画像データそのものを文字列として渡す点に注意が必要です。データベースに保存されたバイナリデータや、file_get_contents()で読み込んだファイルの中身を直接指定します。関数は処理に失敗するとfalseを返すため、戻り値を使う前には必ずfalseでないかを確認してください。このチェックを怠ると、falseに対して配列としてアクセスしようとしてエラーが発生する原因となります。また、不正なデータや対応していない画像形式を渡すとE_WARNINGエラーが発生することがあるため、本番環境ではエラー表示を抑制するなどの考慮も重要です。