(PHP 4, PHP 5, PHP 7)
getimagesize — 画像の大きさを取得する
$filename
[, array &$imageinfo
] ) : array
getimagesize() 関数は、サポートする任意の形式の画像ファイルの大きさを決定し、
ファイルの型と高さ/幅を表す文字列を返します。これらは
HTML の IMG
タグや HTTP の content type として使用できます。
この関数は、filename
が適切な画像ファイルであることを想定しています。
画像以外のファイルを渡してもそれを画像だと判断してしまい、関数の処理は成功するでしょう。
しかし、配列には意味のない値が含まれる場合があります。
getimagesize() を使って、そのファイルが画像であるかどうかを確かめることはできません。 そのようなことをしたい場合は、そのために用意されたソリューション (Fileinfo 拡張モジュールなど) を使いましょう。
getimagesize() は、
imageinfo
パラメータで追加情報を返します。
注意: JPC と JP2 は異なるビット深度のコンポーネントを含むことが可能なことに 注意してください。この場合 "bits" に対する値は、 最も大きい深度になります。また、JP2 ファイルは 複数の JPEG 2000 コードストリームを含む場合があります。この場合、 getimagesize() はファイルのルートから 最初に遭遇するコードストリームに対する値を返します。
注意: アイコンに関する情報は、ビットレートが最大のアイコンから取得します。
注意: GIF images consist of one or more frames, where each frame may only occupy part of the image. The size of the image which is reported by getimagesize() is the overall size (read from the logical screen descriptor).
filename
このパラメータは、情報を取得したいファイルの名前を指定します。 ローカルファイルへの参照、あるいは (設定で許可されているなら) ストリームを用いたリモートファイルへの参照を指定できます。
imageinfo
オプションのパラメータで、 画像ファイルから何らかの拡張情報を引き出すことが可能です。 現在、この変数にはJPGファイルについて 異なった複数のAPPマーカーが連想配列として返されます。いくつかのプログラムは、 これらのAPPマーカーを画像の中の埋込テキストの情報として使用します。 最も一般的な例は、マーカーAPPl3に埋込IPTC » http://www.iptc.org/情報が返されることです。 バイナリ形式のマーカーAPP13を読むことができるよう処理するために iptcparse() 関数を使用することができます。
注意:
imageinfo
は、 JFIF ファイルのみをサポートします。
最大 7 つの要素からなる配列を返します。画像の形式によっては、 channels や bits は含まれないことがあります。
0 番目および 1 番目の要素は、それぞれ画像の幅と高さを表します。
注意:
形式によっては、画像を含まないものや複数の画像を含むものがあります。 これらの場合、getimagesize() は画像のサイズを適切に決定することができません。このような場合、 getimagesize() が返す幅と高さはいずれもゼロとなります。
2 番目の要素は IMAGETYPE_XXX constants 定数のひとつで、 画像の形式を表します。
3 番目の要素は IMG タグで直接利用できる文字列 height="yyy" width="xxx" です。
mimeは画像のMIMEタイプに一致します。この情報は 画像とともに正しい HTTP Content-type ヘッダを転送するために使用できます。
例1 getimagesize() および MIME 型
<?php
$size = getimagesize($filename);
$fp = fopen($filename, "rb");
if ($size && $fp) {
header("Content-type: {$size['mime']}");
fpassthru($fp);
exit;
} else {
// エラー
}
?>
channels は RGB 画像の場合に 3、CMYK 画像の場合に 4 です。
bits は個々の色のビット数です。
画像の形式によっては、channels や bits の値の存在は混乱の元です。 たとえば、GIF は常に 1 ピクセルあたり 3 チャンネルを使用しますが、グローバルカラーテーブルを使ったアニメーション GIF のピクセルあたりのビット数を計算することはできません。
失敗した場合には FALSE
を返します。
もし filename
のイメージにアクセスできない場合、
getimagesize()
は FALSE
を返し、E_WARNING
レベルのエラーを発生させます。
読み込み時にエラーが発生した場合は、
getimagesize() は
E_NOTICE
レベルのエラーを発生させます。
バージョン | 説明 |
---|---|
7.1.0 | WebP に対応しました。 |
5.3.0 | アイコンに対応しました。 |
5.2.3 |
読み込み時にエラーが発生した場合のエラーレベルが、
E_WARNING から
E_NOTICE に変わりました。
|
4.3.2 | JPC, JP2, JPX, JB2, XBM, WBMP のサポートが追加されました。 |
4.3.2 |
imageinfo
パラメータで JPEG 2000 のサポートが追加されました。
|
4.3.0 | bits と channels が他の画像形式でも使用できるようになりました。 |
4.3.0 | SWC および IFF のサポートが追加されました。 |
4.2.0 | TIFF のサポートが追加されました。 |
4.0.6 | BMP および PSD のサポートが追加されました。 |
例2 getimagesize() の例
<?php
list($width, $height, $type, $attr) = getimagesize("img/flag.jpg");
echo "<img src=\"img/flag.jpg\" $attr alt=\"getimagesize() example\" />";
?>
例3 getimagesize (URL)
<?php
$size = getimagesize("http://www.example.com/gifs/logo.gif");
// ファイル名にスペースが含まれる場合は適切にエンコードしてください
$size = getimagesize("http://www.example.com/gifs/lo%20go.gif");
?>
例4 IPTC を返す getimagesize()
<?php
$size = getimagesize("testimg.jpg", $info);
if (isset($info["APP13"])) {
$iptc = iptcparse($info["APP13"]);
var_dump($iptc);
}
?>
注意:
この関数は、GD 画像ライブラリを必要としません。