ホームページ  >  記事  >  バックエンド開発  >  PHP を使用して画像の EXIF 情報を読み取る方法についての簡単な説明 (コード付き)

PHP を使用して画像の EXIF 情報を読み取る方法についての簡単な説明 (コード付き)

青灯夜游
青灯夜游転載
2021-10-28 19:11:195119ブラウズ

PHP を使用して画像の EXIF 情報を読み取るにはどうすればよいですか?以下の記事では、PHPを使って画像ファイルのEXIF情報を取得する方法を紹介しますので、ご参考になれば幸いです。

PHP を使用して画像の EXIF 情報を読み取る方法についての簡単な説明 (コード付き)

私たちが撮影した写真やさまざまな画像ファイルの中には、携帯電話で撮影した際の位置情報など、直接見ることのできない情報が実は保存されています。画像の種類やサイズなど、この情報をEXIF情報といいます。通常、JPG や TIFF などの画像ファイルにはそのような情報が含まれます。実はEXIFとは、デジタル写真の属性情報や撮影データを記録するために、このようなデジタル写真専用にカスタマイズされたもので、日本で独自に策定されたものです。これは実はわかりやすいのですが、カメラ産業は基本的に日本が独占しているので、当然この基準は日本が決めているんです!

EXIF は Windows システムでネイティブ サポートされています。画像を右クリックしてメニューを開き、[プロパティ] をクリックして [詳細] に切り替えて、画像ファイルの EXIF 情報を直接確認します。この情報は任意に編集できるため、一部の参考として使用することはできますが、EXIF の幅や高さなどの特定の機能属性の明確な値として取得することはできません。

EXIF で画像の種類情報を取得する

まず、EXIF から画像の種類を見てみましょう。

var_dump(exif_imagetype($png)); // int(3)
echo exif_imagetype($png) == IMAGETYPE_PNG ? $png . '是 PNG 图片' : $png . '不是 PNG 图片', PHP_EOL;
// ../img/1.png是 PNG 图片

var_dump(exif_imagetype($jpg)); // int(2)
echo exif_imagetype($jpg) == IMAGETYPE_JPEG ? $jpg . '是 jpg 图片' : $jpg . '不是 JPG 图片', PHP_EOL;
// ../img/2.jpg是 jpg 图片

exif_imagetype() 関数を直接使用すると、イメージ タイプの定数が返されます。これは、IMAGETYPE_ で始まる定数情報によって表されるイメージ タイプです。他の多くのタイプも含まれていますが、ここでは最も一般的な jpg および png 画像タイプの取得のみを示します。

これは、getimagesize() 関数によって返される 3 番目の属性、つまり添え字 2 が付いた属性の内容と同じです。getimagesize() 関数では、0 と 1 は幅と高さを表します。 .2は画像の種類を表します。

var_dump(getimagesize($jpg));
// array(7) {
//     [0]=>
//     int(300)
//     [1]=>
//     int(244)
//     [2]=>
//     int(2)
//     [3]=>
//     string(24) "width="300" height="244""
//     ["bits"]=>
//     int(8)
//     ["channels"]=>
//     int(3)
//     ["mime"]=>
//     string(10) "image/jpeg"
//   }

完全な EXIF 情報の取得

画像内のすべての完全な EXIF 情報は、exif_read_data() 関数を通じて取得されます。

var_dump(exif_read_data($png));
// PHP Warning:  exif_read_data(1.png): File not supported in /Users/zhangyue/MyDoc/博客文章/dev-blog/php/202011/source/11.使用PHP获取图像文件的EXIF信息.php on line 14

// Warning: exif_read_data(1.png): File not supported in /Users/zhangyue/MyDoc/博客文章/dev-blog/php/202011/source/11.使用PHP获取图像文件的EXIF信息.php on line 14

// bool(false)

var_dump(exif_read_data($jpg));
// array(8) {
//     ["FileName"]=>
//     string(5) "2.jpg"
//     ["FileDateTime"]=>
//     int(1605061174)
//     ["FileSize"]=>
//     int(19075)
//     ["FileType"]=>
//     int(2)
// ……
// ……

前述の通り、EXIF情報はJPGやTIFFなどの画像形式にしか存在しないため、PNG画像ではEXIF情報を取得できません。 exif_read_data() が PNG 画像で使用される場合、警告が発行されます。 JPG の場合、完全な EXIF コンテンツが返されます。ここではその一部を切り取っただけですが、幅、高さ、種類、圧縮率などだけでなく、多くのコンテンツが含まれています。携帯電話で撮影した場合は、携帯電話のメーカー、地理的な位置、もちろん、シャッター パラメーター、絞りパラメーターなど、これは使用するカメラにも大きく関係しており、一部のメーカーではデータが少ない場合があります。これを写真に撮って、この機能を使用して自分の目で確認することができます。

さらに、exif_read_data() と同様の関数を持つエイリアス関数 read_exif_data() がありますが、これはそのエイリアスであり、PHP7 以降では古い構文としてマークされています。誰もが知ることができます。

var_dump(read_exif_data($jpg));
// PHP Deprecated:  Function read_exif_data() is deprecated in /Users/zhangyue/MyDoc/博客文章/dev-blog/php/202011/source/11.使用PHP获取图像文件的EXIF信息.php on line 17

// Deprecated: Function read_exif_data() is deprecated in /Users/zhangyue/MyDoc/博客文章/dev-blog/php/202011/source/11.使用PHP获取图像文件的EXIF信息.php on line 17
// array(8) {
//   ["FileName"]=>
//   string(5) "2.jpg"
//   ["FileDateTime"]=>
//   int(1605061174)
//   ["FileSize"]=>
// ……
// ……

指定されたインデックスのヘッダー名を取得します

インデックス ヘッダーは EXIF のフィールド名に対応します。現在サポートされているすべてのインデックス ヘッダー情報を表示できます。これには多くの内容が含まれています。インデックス ヘッダーに基づいて属性名を取得し、EXIF で対応する属性情報を検索することもできます。

echo "256: " . exif_tagname(256) . PHP_EOL;
// 256: ImageWidth
for ($id = 1; $id <= 65535; $id++) {
    if (exif_tagname($id) != "") {
        echo $id . &#39; ( &#39; . exif_tagname($id) . &#39; )&#39;, PHP_EOL;
    }
}
// 11 ( ACDComment )
// 254 ( NewSubFile )
// 255 ( SubFile )
// 256 ( ImageWidth )
// 257 ( ImageLength )
// 258 ( BitsPerSample )
// 259 ( Compression )
// ……
// ……
// ……

JPG ファイルに埋め込まれたサムネイルを読む

サムネイルを EXIF に保存できることを知らない人も多いかもしれません。そして、皆さんの携帯電話で撮った写真には、基本的にこのサムネイルが表示されます。 Windowsシステムでは、画像にサムネイルがある場合はEXIF内のサムネイルがそのまま使用されますが、そうでない場合はディレクトリ内にサムネイルデータベースであるThumbs.dbファイルが自動生成されます。

var_dump(exif_thumbnail(&#39;../img/3.jpeg&#39;));

file_put_contents(&#39;../img/3-thumbnail.jpeg&#39;, exif_thumbnail(&#39;../img/3.jpeg&#39;));

PHPでは、exif_t​​humbnail()関数を通じてJPGファイル内のEXIFに保存されているサムネイル情報を直接取得できます。テスト コードでは、サムネイルを取得して正式な画像として保存し、サムネイルが実際にどのように見えるかを誰もが確認できるようにします。 exif_read_data() を使用してこのファイルを読み取ると、サムネイルに保存された情報も確認できます。

var_dump(exif_read_data(&#39;../img/3.jpeg&#39;));
// array(56) {
// ……
// ……
// ……
//     ["Make"]=>
//     string(6) "Xiaomi"
//     ["THUMBNAIL"]=>
//     array(9) {
//       ["JPEGInterchangeFormat"]=>
//       int(5504)
//       ["Orientation"]=>
//       int(6)
//       ["JPEGInterchangeFormatLength"]=>
//       int(14369)
//       ["Compression"]=>
//       int(6)
//       ["ResolutionUnit"]=>
//       int(2)
//       ["XResolution"]=>
//       string(4) "72/1"
//       ["YResolution"]=>
//       string(4) "72/1"
//       ["ExifImageLength"]=>
//       int(240)
//       ["ExifImageWidth"]=>
//       int(320)
//     }
//     ["UndefinedTag:0x9AAA"]=>
//     string(4480) "1y�L�=w%�s_�&��v��oJ��$Gdz|d�9n�
// ……
// ……

概要

これで、写真の EXIF についての基本を理解できました。今日学ぶ際に注意すべき点は次のとおりです。まず、EXIF は JPG や TIFF などの画像形式でのみ利用可能であり、第 2 に、それらは変更可能であり、第 3 に、これはサムネイルを保存することもできます。案の定、勉強というのは底なし沼で、偶然また目を開けてしまいました。さあ、みんな!

テストコード: https://github.com/zhangyue0503/dev-blog/blob/master/php/202011/source/11. PHP を使用して画像の EXIF 情報を取得しますfile.php

推奨学習: 「PHP ビデオ チュートリアル

以上がPHP を使用して画像の EXIF 情報を読み取る方法についての簡単な説明 (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。