説明
arrayfalse getimagesize(string $filename, array &$image_info = null)
警告
この関数は、filename が適切な画像ファイルであることを想定しています。
画像以外のファイルを渡してもそれを画像だと判断してしまい、関数の処理は成功するでしょう。
しかし、配列には意味のない値が含まれる場合があります。
getimagesize を使って、そのファイルが画像であるかどうかを確かめることはできません。
そのようなことをしたい場合は、そのために用意されたソリューション
(Fileinfo 拡張モジュールなど) を使いましょう。
getimagesize は、
image_info パラメータで追加情報を返します。
注意:
JPC と JP2 は異なるビット深度のコンポーネントを含むことが可能なことに
注意してください。この場合 "bits" に対する値は、
最も大きい深度になります。また、JP2 ファイルは 複数の JPEG 2000
コードストリームを含む場合があります。この場合、
getimagesize はファイルのルートから
最初に遭遇するコードストリームに対する値を返します。
注意:
アイコンに関する情報は、ビットレートが最大のアイコンから取得します。
注意:
GIF 画像はひとつ以上のフレームからなります。
個々のフレームは画像の一部のみを占めます。
getimagesize が報告する画像のサイズは、
(logical screen descriptor から読み込まれた) 全部のサイズです。
パラメータ
-
filename
-
このパラメータは、情報を取得したいファイルの名前を指定します。
ローカルファイルへの参照、あるいは (設定で許可されているなら)
ストリームを用いたリモートファイルへの参照を指定できます。
-
image_info
-
オプションのパラメータで、
画像ファイルから何らかの拡張情報を引き出すことが可能です。
現在、この変数にはJPGファイルについて
異なった複数のAPPマーカーが連想配列として返されます。いくつかのプログラムは、
これらのAPPマーカーを画像の中の埋込テキストの情報として使用します。
最も一般的な例は、マーカーAPPl3に埋込IPTC
» http://www.iptc.org/情報が返されることです。
バイナリ形式のマーカーAPP13を読むことができるよう処理するために
iptcparse 関数を使用することができます。
注意:
image_info は、
JFIF ファイルのみをサポートします。
戻り値
最大 7 つの要素からなる配列を返します。画像の形式によっては、
channels や bits は含まれないことがあります。
0 番目および 1 番目の要素は、それぞれ画像の幅と高さを表します。
注意:
形式によっては、画像を含まないものや複数の画像を含むものがあります。
これらの場合、getimagesize
は画像のサイズを適切に決定することができません。このような場合、
getimagesize が返す幅と高さはいずれもゼロとなります。
注意:
getimagesize は、どの画像のメタデータにも依存しません。
たとえば、Exif の Orientation フラグが、
画像を90度か270度回転するよう設定されていた場合、
0番目と1番目の要素は入れ替えられます。
つまり、これらは高さと幅をそれぞれ含んでいるということです。
2 番目の要素は IMAGETYPE_* 定数のひとつで、
画像の形式を表します。
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 レベルのエラーを発生させます。
例
例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 画像ライブラリは必要ありません。
参考
- image_type_to_mime_type
- exif_imagetype
- exif_read_data
- exif_thumbnail
- imagesx
- imagesy