Heim >Backend-Entwicklung >PHP-Tutorial >Eine kurze Diskussion darüber, wie man mit PHP die EXIF-Informationen von Bildern liest (mit Code)

Eine kurze Diskussion darüber, wie man mit PHP die EXIF-Informationen von Bildern liest (mit Code)

青灯夜游
青灯夜游nach vorne
2021-10-28 19:11:195169Durchsuche

Wie lese ich die EXIF-Informationen von Bildern mit PHP? Der folgende Artikel stellt Ihnen vor, wie Sie mit PHP die EXIF-Informationen von Bilddateien erhalten. Ich hoffe, er ist hilfreich für Sie!

Eine kurze Diskussion darüber, wie man mit PHP die EXIF-Informationen von Bildern liest (mit Code)

In den von uns aufgenommenen Fotos und verschiedenen Bilddateien sind tatsächlich einige Informationen gespeichert, die nicht intuitiv erkennbar sind, wie z. B. die Standortinformationen beim Fotografieren mit einem Mobiltelefon, die Art und Größe des Bildes usw. Diese Informationen werden als EXIF-Informationen bezeichnet. Im Allgemeinen verfügen Bilddateien wie JPG und TIFF über solche Informationen. EXIF ist eigentlich speziell auf diese Art von Digitalfotos zugeschnitten und wird speziell zum Aufzeichnen der Attributinformationen und Aufnahmedaten von Digitalfotos verwendet. Es wurde ursprünglich in Japan entwickelt. Das ist eigentlich leicht zu verstehen, Japan hat im Grunde ein Monopol auf die Kameraindustrie, also werden diese Standards natürlich von ihnen festgelegt!

EXIF bietet native Unterstützung in Windows-Systemen. Klicken Sie mit der rechten Maustaste auf das Bild, um das Menü zu öffnen, klicken Sie dann auf Eigenschaften und wechseln Sie zu Details, um die EXIF-Informationen der Bilddatei direkt anzuzeigen. Da diese Informationen nach Belieben bearbeitet werden können, können sie als Referenz verwendet werden und können nicht als eindeutige Werte bestimmter Funktionsattribute abgerufen werden. Vertrauen Sie beispielsweise den Informationen in EXIF ​​nicht vollständig, z. B. Breite und Höhe.

Informationen zum Bildtyp in EXIF ​​abrufen

Beobachten wir zunächst den Bildtyp über 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 图片

Wenn Sie die Funktion exif_imagetype() direkt verwenden, wird eine Konstante des Bildtyps zurückgegeben. Dabei handelt es sich um den Bildtyp, der durch die Konstanteninformationen dargestellt wird, beginnend mit IMAGETYPE_. Es umfasst auch viele andere Typen. Hier zeigen wir nur die Erfassung unserer gängigsten JPG- und PNG-Bildtypen.

Es ist dasselbe wie das dritte Attribut, das von der Funktion getimagesize() zurückgegeben wird, nämlich das Attribut mit dem Index 2. In der Funktion getimagesize() stellen 0 und 1 die Breite und Höhe dar und 2 repräsentiert den Typ von Bild.

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"
//   }

Erhalten Sie vollständige EXIF-Informationen

Alle vollständigen EXIF-Informationen im Bild werden über die Funktion exif_read_data() abgerufen.

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)
// ……
// ……

Wie bereits erwähnt, existieren EXIF-Informationen nur in JPG, TIFF und anderen Bildformaten, sodass PNG-Bilder keine EXIF-Informationen erhalten können. Wenn exif_read_data() für PNG-Bilder verwendet wird, wird eine Warnung ausgegeben. Bei JPG wird der komplette EXIF-Inhalt zurückgegeben. Hier haben wir nur einen Teil davon abgefangen, nicht nur Breite, Höhe, Typ, Komprimierungsverhältnis usw. Wenn es mit einem Mobiltelefon aufgenommen wurde, können Sie auch den Hersteller des Mobiltelefons, den geografischen Standort usw. sehen. Verschlussparameter, Blendenparameter usw., das hat natürlich auch viel mit der von Ihnen verwendeten Kamera zu tun, einige Hersteller verfügen möglicherweise über weniger Daten. Sie können davon ein Foto machen und sich mit dieser Funktion selbst davon überzeugen.

Darüber hinaus gibt es eine Alias-Funktion read_exif_data(), die eine ähnliche Funktion wie exif_read_data() hat. Sie ist ein Alias ​​davon und wurde nach PHP7 als veraltete Syntax markiert. Jeder kann es herausfinden.

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"]=>
// ……
// ……

Holen Sie sich den Header-Namen des angegebenen Index

Der Index-Header entspricht dem Feldnamen in EXIF. Wir können alle derzeit unterstützten Index-Header-Informationen anzeigen, und es gibt viele Inhalte. Sie können den Attributnamen auch anhand des Indexheaders ermitteln und dann in EXIF ​​nach den entsprechenden Attributinformationen suchen.

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 )
// ……
// ……
// ……

In JPG-Dateien eingebettete Miniaturansichten lesen

Viele Leute wissen möglicherweise nicht, dass Miniaturansichten im EXIF-Format gespeichert werden können. Und die Fotos, die mit jedem Mobiltelefon aufgenommen werden, haben grundsätzlich dieses Miniaturbild. Wenn das Bild in Windows-Systemen über eine Miniaturansicht verfügt, wird die Miniaturansicht im EXIF-Format direkt verwendet. Andernfalls wird automatisch eine Thumbs.db-Datei im Verzeichnis generiert, bei der es sich um eine Miniaturansichtsdatenbank handelt.

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;));

In PHP können Sie die in EXIF ​​gespeicherten Miniaturbildinformationen direkt in einer JPG-Datei über die Funktion exif_thumbnail() abrufen. Im Testcode rufen wir es ab und speichern es dann als formales Bild, sodass jeder sehen kann, wie das Miniaturbild wirklich aussieht. Und wenn wir exif_read_data() verwenden, um diese Datei zu lesen, können wir auch die im Miniaturbild gespeicherten Informationen sehen.

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�
// ……
// ……

Zusammenfassung

Jetzt haben Sie ein grundlegendes Verständnis für das EXIF ​​von Bildern. Beim heutigen Lernen sind einige Punkte zu beachten: Erstens ist EXIF ​​nur in Bildformaten wie JPG und TIFF verfügbar, zweitens sind sie modifizierbar und drittens kann dieses Ding sogar ein Miniaturbild speichern. Tatsächlich ist Lernen ein Fass ohne Boden, und ich habe versehentlich meine Augen wieder geöffnet. Kommt schon, Jungs!

Testcode: https://github.com/zhangyue0503/dev-blog/blob/master/php/202011/source/11. Verwenden Sie PHP, um die EXIF-Informationen von Bilddateien zu erhalten.php

Empfohlen Lernen: „ PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonEine kurze Diskussion darüber, wie man mit PHP die EXIF-Informationen von Bildern liest (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:juejin.cn. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen