目次
EXIF で画像の種類情報を取得する
完全な EXIF 情報の取得
指定されたインデックスのヘッダー名を取得します
JPG ファイルに埋め込まれたサムネイルを読む
概要
ホームページ バックエンド開発 PHPチュートリアル PHP を使用して画像の EXIF 情報を読み取る方法についての簡単な説明 (コード付き)

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

Oct 28, 2021 pm 07:11 PM
exif情報 php

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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ランプスタックを超えて:現代のエンタープライズアーキテクチャにおけるPHPの役割 ランプスタックを超えて:現代のエンタープライズアーキテクチャにおけるPHPの役割 Jul 27, 2025 am 04:31 AM

phpisStillRelevantinModernenterpriseenvironments.1.modernphp(7.xand8.x)は、パフォーマンスゲイン、stricttyping、jit compilation、andmodernsyntaxを提供し、scaleApplications.2.phpintegrateSeffeCtiveTiveliveTiveliveTiveliveTiveTiveTiveliveTiveStures、

PHPでのオブジェクトリレーショナルマッピング(ORM)パフォーマンスチューニング PHPでのオブジェクトリレーショナルマッピング(ORM)パフォーマンスチューニング Jul 29, 2025 am 05:00 AM

n 1クエリの問題を避け、関連するデータを事前にロードすることにより、データベースクエリの数を減らします。 2.必要なフィールドのみを選択して、メモリと帯域幅を保存するために完全なエンティティをロードしないようにします。 3. DoctrineのセカンダリキャッシュやRedis Cacheの高周波クエリ結果など、キャッシュ戦略を合理的に使用します。 4.エンティティのライフサイクルを最適化し、クリア()を定期的に呼び出してメモリを解放してメモリオーバーフローを防ぎます。 5.データベースインデックスが存在し、生成されたSQLステートメントを分析して、非効率的なクエリを避けます。 6.変更が不要なシナリオで自動変更追跡を無効にし、パフォーマンスを改善するためにアレイまたは軽量モードを使用します。 ORMを正しく使用するには、SQLモニタリング、キャッシュ、バッチ処理、適切な最適化を組み合わせて、開発効率を維持しながらアプリケーションのパフォーマンスを確保する必要があります。

PHPとrabbitmqを使用した回復力のあるマイクロサービスを構築します PHPとrabbitmqを使用した回復力のあるマイクロサービスを構築します Jul 27, 2025 am 04:32 AM

柔軟なPHPマイクロサービスを構築するには、RabbitMQを使用して非同期通信を実現する必要があります。 2。信頼性を確保するために、永続的なキュー、永続的なメッセージ、リリース確認、手動ACKを構成します。 3.指数バックオフ再試行、TTL、およびデッドレターキューセキュリティ処理の障害を使用します。 4.監督などのツールを使用して、消費者プロセスを保護し、ハートビートメカニズムを有効にしてサービスの健康を確保します。そして最終的に、システムが障害で継続的に動作する能力を実現します。

Python Run Shellコマンドの例 Python Run Shellコマンドの例 Jul 26, 2025 am 07:50 AM

subprocess.run()を使用して、シェルコマンドを安全に実行し、出力をキャプチャします。注入リスクを避けるために、リストのパラメーターを渡すことをお勧めします。 2。シェル特性が必要な場合は、シェル= trueを設定できますが、コマンドインジェクションに注意してください。 3. subprocess.popenを使用して、リアルタイム出力処理を実現します。 4。Check = COMMATが失敗したときに例外をスローするためにtrueを設定します。 5.単純なシナリオで直接チェーンを呼び出して出力を取得できます。 os.system()または非推奨モジュールの使用を避けるために、日常生活の中でsubprocess.run()を優先する必要があります。上記の方法は、Pythonでシェルコマンドを実行するコアの使用を上書きします。

vscode settings.jsonの場所 vscode settings.jsonの場所 Aug 01, 2025 am 06:12 AM

settings.jsonファイルは、ユーザーレベルまたはワークスペースレベルのパスにあり、VSCODE設定のカスタマイズに使用されます。 1。ユーザーレベルのパス:WindowsはC:\ users \\ appdata \ roaming \ code \ user \ settings.json、macos is/users //settings.json、linux is /home/.config/code/user/settings.json; 2。Workspace-Level Path:.vscode/settings Project Root Directoryの設定

PHP用の生産対応Docker環境の作成 PHP用の生産対応Docker環境の作成 Jul 27, 2025 am 04:32 AM

正しいPHP Basicイメージを使用し、安全で最適化されたDocker環境を構成することが、生産を実現するための鍵です。 1.攻撃面を減らしてパフォーマンスを向上させるための基本画像としてPHP:8.3-fpm-alpineを選択します。 2.カスタムPHP.iniを介して危険な機能を無効にし、エラーディスプレイをオフにし、OpCacheとJITを有効にしてセキュリティとパフォーマンスを強化します。 3. NGINXを逆プロキシとして使用して、機密ファイルへのアクセスを制限し、PHPリクエストをPHP-FPMに正しく転送します。 4.マルチステージ最適化画像を使用して開発依存関係を削除し、非ルートユーザーを設定してコンテナを実行します。 5. CRONなどの複数のプロセスを管理するためのオプションの監督。 6.展開前に機密情報漏れがないことを確認します

Readonlyプロパティを備えたPHPに不変のオブジェクトを構築します Readonlyプロパティを備えたPHPに不変のオブジェクトを構築します Jul 30, 2025 am 05:40 AM

readonlypropertiesinphp8.2canonlybeassignedonedonedontheconstructoraturatiddeclaration andcannotBemodifiedifiedifiedifiedifiedifiedifiedifiadtivedabilityattthelanguagelele.2.

サーバーレス革命:BREFを使用してスケーラブルなPHPアプリケーションを展開します サーバーレス革命:BREFを使用してスケーラブルなPHPアプリケーションを展開します Jul 28, 2025 am 04:39 AM

BREFにより、PHP開発者は、サーバーを管理せずにスケーラブルで費用対効果の高いアプリケーションを構築できます。 1.Brefは、最適化されたPHPランタイムレイヤーを提供し、PHP8.3およびその他のバージョンをサポートし、LaravelやSymfonyなどのフレームワークとシームレスに統合することにより、PHPをAwslambdaにもたらします。 2。展開手順には、次のものが含まれます。Composerを使用してBREFのインストール、httpエンドポイントや職人コマンドなどの関数とイベントを定義するためにserverless.ymlの構成。 3. serverlessdeployコマンドを実行して、展開を完了し、Apigatewayを自動的に構成し、アクセスURLを生成します。 4。Lambdaの制限については、Brefは解決策を提供します。

See all articles