ホームページ  >  記事  >  バックエンド開発  >  PHP で写真の exif 情報を読み取る方法、_PHP チュートリアル

PHP で写真の exif 情報を読み取る方法、_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:20:311131ブラウズ

PHPで写真のexif情報を読み取る方法

まずは写真のExif情報とは何かを理解しましょう

Exif は画像ファイル形式であり、そのデータストレージは JPEG 形式とまったく同じです。実際、Exif 形式は、絞り、シャッター、ホワイト バランス、ISO、焦点距離、日付と時刻、カメラのブランド、モデル、カラーコーディングなどのさまざまな撮影条件を含むデジタル写真情報を JPEG 形式のヘッダーに挿入します。 、撮影 録音された音声のほか、全地球測位システム (GPS)、サムネイルなど。簡単に言えば、Exif=JPEG+撮影パラメータです。したがって、JPEG ファイルを表示できる画像表示ソフトウェアを使用して Exif 形式の写真を表示できますが、すべてのグラフィックス プログラムが Exif 情報を処理できるわけではありません。

上記は百度百科事典より引用。

写真の EXIF 情報の読み取りは多くの場合必要ありませんが、写真フォーラム Hummingbird など、写真技術について議論するいくつかのサイトと比較して、写真の EXIF 情報の読み取りは特に重要です。

ハミングバードフォーラムのスクリーンショット、赤丸の情報はプログラムが読み込んだ写真のexif情報です。画像をローカルにダウンロードし、Light and Shadow Magic を使用して画像を開いて Exif 情報を確認します。もちろん、Light と Shadow 以外にも、画像の Exif 値を確認できるツールはたくさんあります。

Exif情報内のレンズ値が読み取れなかった以外は正しく読み込めます。

PHPモジュールを有効にする

デフォルトでは、画像のExif情報を読み取るためのPHPモジュールは有効になっていません。最初にこのモジュールを有効にする必要があります。

Exif モジュールを開くには mbstring のサポートが必要なので、最初に mbstring をインストールします。以下は例として Linux 環境に基づいています。

mbstringモジュールをインストールします

まず、php ソース コード パッケージの場所を見つけて、ext/mbstring に直接移動し、次のコマンドを実行してインストールします。特定のパラメーターはご使用の環境によって異なります。

コードをコピーします コードは次のとおりです:

[root@lee ext]# cd /data0/software/php/ext/mbstring
[root@lee mbstring]# /usr/local/webserver/php/bin/phpize
構成:
PHP API バージョン: 20090626
Zend モジュール API 番号: 20090626
Zend 拡張機能 API 番号: 220090626
[root@lee exif]# ./configure --with-php-config=/usr/local/webserver/php/bin/php-config
[root@lee mbstring]# make && make install
共有拡張機能のインストール: /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/
ヘッダー ファイルのインストール: /usr/local/webserver/php/include/php/
[root@lee mbstring]#

インストール後、拡張機能ディレクトリに移動して、モジュールが存在するかどうかを確認できます。存在する場合は、インストールが成功したことを意味します。

コードをコピーします コードは次のとおりです:

[root@lee mbstring]# cd /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/
[root@lee no-debug-non-zts-20090626]#ll
合計使用量 1880
-rwxr-xr-x 1 ルート root 414405 2012 年 6 月 12 日 eaccelerator.so
-rwxr-xr-x. 1 ルート root 1091242 2011 年 9 月 23 日 imagick.so
-rwxr-xr-x. 1 ルート root 5285 2 月 20 日 15:07 mbstring.so
-rwxr-xr-x. 1 ルート root 246752 2011 年 9 月 23 日 memcache.so
-rwxr-xr-x. 1 ルート root 154252 2011 年 9 月 23 日 pdo_mysql.so

exifモジュールをインストール

mbstring モジュールのインストールと同様に、最初にソース コードの場所を見つけてそこに移動し、インストールを構成します。特定のパラメーターは独自の環境によって異なります。

コードをコピーします コードは次のとおりです:

[root@lee exif]# cd /data0/software/php-5.3.13/ext/exif
[root@lee exif]# ./configure --with-php-config=/usr/local/webserver/php/bin/php-config
[root@lee exif]# make && make install
共有拡張機能のインストール: /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/
[root@lee exif]#

拡張機能ディレクトリに入って、インストールが成功したかどうかを確認してください

コードをコピーします コードは次のとおりです:

[root@lee exif]# cd /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/
[root@lee no-debug-non-zts-20090626]#ll
総使用量 2036
-rwxr-xr-x 1 ルート root 414405 2012 年 6 月 12 日 eaccelerator.so
-rwxr-xr-x. 1 root root 158554 2月20日 15:25 exif.so
-rwxr-xr-x. 1 ルート root 1091242 2011 年 9 月 23 日 imagick.so
-rwxr-xr-x. 1 ルート root 5285 2 月 20 日 15:07 mbstring.so
-rwxr-xr-x. 1 ルート root 246752 2011 年 9 月 23 日 memcache.so
-rwxr-xr-x. 1 ルート root 154252 2011 年 9 月 23 日 pdo_mysql.so
[root@lee no-debug-non-zts-20090626]#

exif.so モジュールはすでに存在します。

php.iniにモジュールを追加
php.ini を開き、次の 2 行を追加します

コードをコピーします コードは次のとおりです:
extension = "mbstring.so"
拡張子 = "exif.so"

また、extension_dir の値が、モジュールのインストール時に表示される共有拡張機能のインストールの値と一致していることを確認します。たとえば、モジュールをインストールすると、拡張機能の場所が
と表示されます。
コードをコピーします コードは次のとおりです:
/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/

次に、php.ini の extension_dir が正しいディレクトリを指している必要があります
コードをコピーします コードは次のとおりです:
extension_dir="/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/"

php.ini を保存し、Web サーバーを再起動します。
phpinfo() を開いて、対応するプロパティを見つけて、適切に動作しているかどうかを確認します

通常、次の 2 つのモジュール情報が表示されます

exif_read_data()を使用して画像のexif情報を読み取ります

exif 情報の読み取りをサポートする画像タイプは jpeg または tiff タイプのみであり、これで十分です。
exif_read_data() 関数のユーザーマニュアルを見てみましょう

コードをコピーします コードは次のとおりです:

array exif_read_data ( string $filename [, string $sections = NULL [, bool $arrays = false [, bool $thumbnail = false ]]] )

パラメータ:

filename: 画像の exif 情報を読み取るための画像パス。これを URL にすることはできません。 セクション: 結果の配列を生成するためにファイル内に存在する必要があるセクションのカンマ区切りのリストです。要求されたセクションが見つからない場合、戻り値は FALSE です。

ファイルファイル名、ファイルサイズ、ファイル日時、見つかったセクション計算済みhtml、幅、高さ、IsColor など。高さと幅は getimagesize() と同じメソッドを使用して計算されるため、それらの値を返されるヘッダー情報の一部にすることはできません。なお、htmlとは通常のHTMLANY_TAGIFD0、EXIFなどのタグを含む情報IFD0IFD0のすべてのマークされたデータ。標準の画像ファイルでは、これには画像サイズなどが含まれます。 サムネイル 2 番目の IFD がある場合、ファイルにはサムネイルが含まれている必要があります。埋め込まれたサムネイルに関するすべてのマークアップ情報は、この領域に保存されます。 コメントJPEG画像の注釈ヘッダー情報。 EXIFEXIF セクションは IFDO のサブセクションであり、画像に関するより詳細な情報が含まれています。内容はデジタルカメラ関連がほとんどです。

arrays: 各セクションが配列になるかどうかを指定します。セクション COMPUTED、THUMBNAIL、および COMMENT セクションは、他のセクションと競合する名前が含まれているため、常に配列になります。

サムネイル: TRUE に設定すると、サムネイル自体を読み取ります。それ以外の場合は、タグ データのみが読み取られます。

写真のexif情報を読んでみましょう

コードをコピーします コードは次のとおりです:

$exif = getExif('a.jpg');
echo '
';<br>
print_r($exif);<br>
echo '
';

実行結果:
コードをコピーします コードは次のとおりです:

配列
(
    [ファイル名] => a.jpg
    [ファイル日時] => 1361340032
    [ファイルサイズ] => 69170
    [ファイルタイプ] => 2
    [MimeType] =>画像/jpeg
    [セクションが見つかりました] => ANY_TAG、IFD0、サムネイル、EXIF、GPS、相互運用
    [計算済み] =>配列
        (
            [html] =>幅="600" 高さ="397"
            [高さ] => 397
            [幅] => 600
            [IsColor] => 1
            [バイトオーダーモトローラ] => 1
            [絞りF番号] => f/13.0
            [フォーカス距離] => 3.76メートル
            [ユーザーコメント] =>
            [UserCommentEncoding] =>アスキー
            [著作権] =>                                                     
            [サムネイル.ファイルタイプ] => 2
            [サムネイル.MimeType] =>画像/jpeg
        )
    [画像幅] => 4928
    [画像の長さ] => 3264
    [BitsPerSample] =>配列
        (
            [0] => 8
            [1] => 8
            [2] => 8
        )
    [測光解釈] => 2
    [作る] =>株式会社ニコン
    [モデル] =>ニコン D7000
    [向き] => 1
    [ピクセルあたりのサンプル数] => 3
    [X解像度] => 3000000/10000
    [Y解像度] => 3000000/10000
    [解像度単位] => 2
    [ソフトウェア] => Adobe Photoshop CS5 Windows
    [日時] => 2013:02:18 20:50:46
    [ホワイトポイント] =>配列
        (
            [0] => 313/1000
            [1] => 329/1000
        )
    [主色度] =>配列
        (
            [0] => 64/100
            [1] => 33/100
            [2] => 21/100
            [3] => 71/100
            [4] => 15/100
            [5] => 6/100
        )
    [YCbCr係数] =>配列
        (
            [0] => 299/1000
            [1] => 587/1000
            [2] => 114/1000
        )
    [YCbCrPositioning] => 2
    [著作権] =>                                                     
    [Exif_IFD_Pointer] => 500
    [GPS_IFD_Pointer] => 1248
    [サムネイル] =>配列
        (
            [圧縮] => 6
            [X解像度] => 72/1
            [Y解像度] => 72/1
            [解像度単位] => 2
            [JPEGInterchangeFormat] => 1362
            [JPEGInterchangeFormatLength] => 4784
        )
    [露出時間] => 40/10
    [F番号] => 130/10
    [露出プログラム] => 1
    [ISOSpeedRatings] => 1000
    [未定義タグ:0x8830] => 2
    [ExifVersion] => 0230
    [日時オリジナル] => 2013:02:14 21:12:08
    [DateTimeDigitized] => 2013:02:14 21:12:08
    [コンポーネント構成] =>
    [CompressedBitsPerPixel] => 4/1
    [シャッタースピード値] => -2/1
    [ApertureValue] => 7400879/1000000
    [露出バイアス値] => 2/6
    [MaxApertureValue] => 10月36日
    [被写体の距離] => 376/100
    [測光モード] => 3
    [光源] => 0
    [フラッシュ] => 16
    [焦点距離] => 180/10
    [ユーザーコメント] =>アスキー
    [サブ秒時間] => 10
    [SubSecTimeOriginal] => 10
    [SubSecTimeDigitized] => 10
    [FlashPixバージョン] => 0100
    [カラースペース] => 65535
    [ExifImageWidth] => 600
    [ExifImageLength] => 397
    [相互運用性オフセット] => 1216
    [センシング方法] => 2
    [ファイルソース] =>
    [シーンタイプ] =>
    [CFAPパターン] =>
    [カスタムレンダリング] => 0
    [露出モード] => 1
    [ホワイトバランス] => 0
    [デジタルズーム比率] => 1/1
    [35mmフィルムの焦点距離] => 27
    [SceneCaptureType] => 0
    [ゲインコントロール] => 2
    [コントラスト] => 0
    [彩度] => 0
    [シャープネス] => 0
    [被写体の距離の範囲] => 0
    [未定義タグ:0xA500] => 10/22
    [GPSバージョン] =>
    [InterOperabilityIndex] => R03
    [InterOperabilityVersion] => 0100
)

如果示唆:

复制代码代码如下:

致命的なエラー: /data0/htdocs/www/exif/index.php の 2 行目で未定義関数 exif_read_data() を呼び出します

これは、モジュールが開いていないことを示しています。おそらく、いずれかのブロックが適切に構成されておらず、再構成が適切である可能性があります。

从Exif情報读取結果中取出された有用な情報 上記の実行結果から、非常に多くの画像 Exif が見つかりましたが、必要なのは、フィルタリング パッケージ内の情報から以下の有用な情報を取得することだけです。 この例では、PHP 関数を事前に記述します。光圈、感光度、焦点距離:

复制代価代価如下:

/**
* JPEG画像のExif情報を読み込みます
* $img は画像のパスです
*
*瓊台ブログ
​*/

関数 getExif($img){

$exif = exif_read_data($img, 'IFD0');

配列を返します (
'ファイル名' => $exif['ファイル名'],
'機器ブランド' => $exif['Make'],
'機器' => $exif['モデル'],
'シャッター' => $exif['ExposureTime'],
'絞り' => $exif['FNumber'],
'焦点距離' => $exif['FocalLength'],
'感度' => $exif['ISOSpeedRatings']
);
}

写真を読む

コードをコピーします コードは次のとおりです:
$exifInfo = getExif('a.jpg');
echo '
';<br>
print_r($exifInfo);<br>
echo '
';

実行結果:

コードをコピーします コードは次のとおりです:
配列
(
[ファイル名] => 25556306.jpg
【機材ブランド】 =>株式会社ニコン
【使用機材】 NIKON D3100
[シャッター] => 10/32000
[絞り] =>18/10
[焦点距離] => 350/10
[感度] => 100
)

その他の指示

画像のExif値は対応するツールを通じて変更できるため、プログラムを使用して画像のExif値を読み取ることは、参照としてのみ使用でき、実際の基準としては使用できません。

興味のある友達は、オンライン Exif 情報読み取り Web サイト http://exif.cn にアクセスして楽しむこともできます

PHP モジュールを通じて読み取られる Exif 情報が間違っているか、情報が不完全である場合があります。この場合は、サードパーティのツールを使用できます。次に、php を使用してシステム Linux コマンドを実行して読み取ります

http://www.bkjia.com/PHPjc/866676.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/866676.html技術記事 PHP で写真の Exif 情報を読み取る方法 まず、写真の Exif 情報が何であるかを理解しましょう。Exif は画像ファイル形式であり、そのデータ保存形式は JPEG 形式とまったく同じです。実はエクシ…
で使用できる高さ・幅の文字列です。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。