PHPで画像サイズ(幅・高さ)を取得する一番簡単なやり方

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による画像サイズ取得コード例

では実際のサイズ取得方法について。

次画像のサイズを知りたかったんです。

この画像のサイズ(幅・高さ)をPHPで調べてみた

  • 幅x高さ : 300x255
  • MIMEタイプ : JPEG
  • ビット数 : 24bit

この画像で試してみました。

 

実際に書いたコードがコチラです。

▼ こういうコードを書いてみた

▼ こういう配列が返ってきた

返り値配列の各要素の意味はこんな感じ

  • 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'  になる。

こんな便利な関数があるとは知らなかった。

画像サイズ以外にも色々取得できます。

画像サイズだけを取得できるように関数化

ただここで必要なのは画像サイズだけ

なのでこういう関数を定義してみました。

▼ こういう関数作成

関数化しておくと汎用性高いです。

getimagesizeで画像サイズ取得の注意点

こんな便利な getimagesizeですが・・・

次の注意点があります。

  • 画像かまでは判定しない
  • 解析失敗で false が返ってくる

この2点には少し注意が必要。

例えばフォームなどからファイルを受け取る場合、画像以外でも画像判定されてしまう可能性も0ではありません。そういったリスクは考慮しておく必要があります。

以上、PHPによる画像サイズ取得でした。

間違いなどあればコメントからご指摘ください。ではまた

PHP

Shareこの記事をシェアしよう!

Commentsこの記事についたコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください