PHPにてこういう場面が・・・
- 画像の幅・高さを取得したい
- 画像サイズをとにかく取得したい
- 専用ライブラリは入れたくない
そう思っているといい方法を発見。
ライブラリとかも必要なかったので、
ここではPHPでの画像サイズ取得方法をまとめます。
このページの目次
getimagesize という便利な関数があった
その方法とは getimagesize を使うこと
▼ getimagesizeについての公式説明
getimagesize() 関数は、サポートする任意の形式の画像ファイルの大きさを決定し、 ファイルの型と高さ/幅を表す文字列を返します。これらは HTML の IMG タグや HTTP の content type として使用できます。
警告 この関数は、filename が適切な画像ファイルであることを想定しています。 画像以外のファイルを渡してもそれを画像だと判断してしまい、関数の処理は成功するでしょう。 しかし、配列には意味のない値が含まれる場合があります。
getimagesize() を使って、そのファイルが画像であるかどうかを確かめることはできません。 そのようなことをしたい場合は、そのために用意されたソリューション (Fileinfo 拡張モジュールなど) を使いましょう。
引用元 : https://www.php.net/manual/ja/function.getimagesize.php
`
標準でこういうのが用意されています。
もちろんライブラリなど入れる必要なし。
注意が必要なのは「画像であるかどうかを確かめることはできません」という部分ですね。もし厳密に判定したいなら専用ライブラリを使う必要ありです。とはいえ一般的な用途なら getimagesize() で十分だと思います。
getimagesizeによる画像サイズ取得コード例
では実際のサイズ取得方法について。
次画像のサイズを知りたかったんです。
- 幅x高さ : 300x255
- MIMEタイプ : JPEG
- ビット数 : 24bit
この画像で試してみました。
実際に書いたコードがコチラです。
▼ こういうコードを書いてみた
1 2 3 4 5 |
$file = './kuma.jpg'; if(file_exists($file)){ $size = getimagesize($file); var_export($size); } |
▼ こういう配列が返ってきた
1 2 3 4 5 6 7 8 9 |
array ( 0 => 300, 1 => 225, 2 => 2, 3 => 'width="300" height="225"', 'bits' => 8, 'channels' => 3, 'mime' => 'image/jpeg', ) |
返り値配列の各要素の意味はこんな感じ
- 0番目・1番目
0番目が画像の幅で、1番目が画像高さ。単位はもちろんピクセル。画像解析に失敗しない限り、かならずこの値はセットされているはず。
- 2番目
画像の形式を表す IMAGETYPE_XXX constants 定数。JPEG形式だと 2 が返ってくる。詳細は定義済み変数から確認可能 : https://www.php.net/manual/ja/image.constants.php
- 3番目
img要素に埋め込むことができる幅と高さのテキスト。この例のように 'width="300" height="225"' みたいな値が返ってくる
- bits
個々の色に使われているビット数。フルカラー・256色だと8bit、16色だと4bit、2色だと1bit・・・という風になる模様
- channels
どのチャンネルを使っているかの定数値。RGB 画像の場合に 3、CMYK 画像の場合には 4 になるらしい・・・
- mime
ファイル種類を表すMIMEタイプの文字列。ここではJPEGを読み込んだので 'image/jpeg' の値が返ってきた。PNGなら 'image/png' になる。
こんな便利な関数があるとは知らなかった。
画像サイズ以外にも色々取得できます。
画像サイズだけを取得できるように関数化
ただここで必要なのは画像サイズだけ
なのでこういう関数を定義してみました。
▼ こういう関数作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/** 画像幅と高さだけ取得 **/ function get_image_size($file){ $size = [0, 0]; if(file_exists($file)){ $size = getimagesize($file); if($size){ $size = [$size[0], $size[1]]; } } return $size; } /// 実際に取得 var_export(get_image_size('./kuma.jpg')); |
関数化しておくと汎用性高いです。
getimagesizeで画像サイズ取得の注意点
こんな便利な getimagesizeですが・・・
次の注意点があります。
- 画像かまでは判定しない
- 解析失敗で false が返ってくる
この2点には少し注意が必要。
例えばフォームなどからファイルを受け取る場合、画像以外でも画像判定されてしまう可能性も0ではありません。そういったリスクは考慮しておく必要があります。
以上、PHPによる画像サイズ取得でした。
間違いなどあればコメントからご指摘ください。ではまた