Maison >développement back-end >tutoriel php >Une brève discussion sur la façon d'utiliser PHP pour lire les informations EXIF ​​​​des images (avec code)

Une brève discussion sur la façon d'utiliser PHP pour lire les informations EXIF ​​​​des images (avec code)

青灯夜游
青灯夜游avant
2021-10-28 19:11:195169parcourir

Comment lire les informations EXIF ​​​​des images en utilisant PHP ? L'article suivant vous présentera comment utiliser PHP pour obtenir les informations EXIF ​​​​des fichiers image. J'espère qu'il vous sera utile !

Une brève discussion sur la façon d'utiliser PHP pour lire les informations EXIF ​​​​des images (avec code)

Dans les photos et divers fichiers d'images que nous prenons, certaines informations sont en fait stockées qui ne peuvent pas être vues intuitivement, telles que les informations de localisation lors de la prise de photos avec un téléphone portable, le type et la taille de l'image, etc. Ces informations sont appelées informations EXIF. Généralement, les fichiers image tels que JPG et TIFF contiennent de telles informations. EXIF est en fait spécialement personnalisé pour ce type de photos numériques. Il est spécialement utilisé pour enregistrer les informations d'attribut et les données de prise de vue des photos numériques. Il a été initialement formulé au Japon. C’est en fait facile à comprendre. Le Japon a fondamentalement le monopole de l’industrie des caméras, donc bien sûr, ces normes sont fixées par eux !

EXIF a un support natif dans les systèmes Windows. Cliquez avec le bouton droit sur l'image pour ouvrir le menu, puis cliquez sur Propriétés et passez à Détails pour voir directement les informations EXIF ​​​​du fichier image. Étant donné que ces informations peuvent être modifiées à volonté, elles peuvent être utilisées comme références et ne peuvent pas être obtenues comme valeurs définies de certains attributs fonctionnels. Par exemple, ne faites pas entièrement confiance aux informations EXIF, telles que la largeur et la hauteur.

Obtenir des informations sur le type d'image dans EXIF

Tout d'abord, examinons le type d'image via 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 图片

L'utilisation directe de la fonction exif_imagetype() renverra une constante de type image, qui est le type d'image représenté par les informations constantes commençant par IMAGETYPE_. Il comprend également de nombreux autres types. Ici, nous démontrons uniquement l'acquisition de nos types d'images jpg et png les plus courants.

C'est le même que le troisième attribut renvoyé par la fonction getimagesize(), c'est-à-dire l'attribut avec l'indice 2. Dans la fonction getimagesize(), 0 et 1 représentent la largeur et la hauteur, et 2 représente le type de image.

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

Obtenez des informations EXIF ​​​​complètes

Toutes les informations EXIF ​​​​complètes de l'image sont obtenues via la fonction 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)
// ……
// ……

Comme mentionné précédemment, les informations EXIF ​​​​​​n'existent qu'en JPG, TIFF et autres formats d'image, les images PNG ne peuvent donc pas obtenir d'informations EXIF ​​​​. Un avertissement sera émis si exif_read_data() est utilisé sur des images PNG. Pour JPG, le contenu EXIF ​​​​complet sera renvoyé. Ici, nous n'en avons intercepté qu'une partie. Il y a beaucoup de contenu, pas seulement la largeur, la hauteur, le type, le taux de compression, etc. Si elle est prise avec un téléphone portable, vous pouvez également voir le fabricant du téléphone mobile, sa situation géographique, les paramètres d'obturation, les paramètres d'ouverture, etc., bien sûr, cela a aussi beaucoup à voir avec l'appareil photo que vous utilisez, certains fabricants peuvent avoir moins de données. Vous pouvez en prendre une photo et utiliser cette fonction pour le vérifier par vous-même.

De plus, il existe une fonction d'alias read_exif_data(), qui a une fonction similaire à exif_read_data(). C'est un alias de celle-ci et a été marquée comme syntaxe obsolète après PHP7. Tout le monde peut le découvrir.

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

Obtenir le nom d'en-tête de l'index spécifié

L'en-tête d'index correspond au nom du champ dans EXIF ​​Nous pouvons afficher toutes les informations d'en-tête d'index actuellement prises en charge, et il y a beaucoup de contenu. Vous pouvez également obtenir le nom de l'attribut en fonction de l'en-tête de l'index, puis rechercher les informations d'attribut correspondantes dans 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 )
// ……
// ……
// ……

Lisez les vignettes intégrées dans les fichiers JPG

Beaucoup de gens ne savent peut-être pas qu'une vignette peut être enregistrée au format EXIF. Et les photos prises par le téléphone portable de chacun auront essentiellement cette vignette. Dans les systèmes Windows, si l'image a une vignette, la vignette en EXIF ​​​​sera utilisée directement. Sinon, un fichier Thumbs.db sera automatiquement généré dans le répertoire, qui est une base de données de vignettes.

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

En PHP, vous pouvez obtenir directement les informations de vignette enregistrées en EXIF ​​​​dans un fichier JPG via la fonction exif_thumbnail(). Dans le code de test, nous l'obtenons puis l'enregistrons sous forme d'image formelle, afin que tout le monde puisse voir à quoi ressemble réellement la vignette. Et si nous utilisons exif_read_data() pour lire ce fichier, nous pouvons également voir les informations enregistrées dans la vignette.

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

Résumé

Vous avez maintenant une compréhension de base de l'EXIF ​​des images. Quelques points à noter lors de l'apprentissage aujourd'hui sont les suivants : premièrement, EXIF ​​​​n'est disponible que dans des formats d'image tels que JPG et TIFF, deuxièmement, ils sont modifiables et troisièmement, cette chose peut même enregistrer une vignette. Effectivement, apprendre est un gouffre sans fond et j'ai accidentellement rouvert les yeux. Allez, les garçons !

Code de test : https://github.com/zhangyue0503/dev-blog/blob/master/php/202011/source/11 Utilisez PHP pour obtenir les informations EXIF ​​​​des fichiers image.php

Recommandé. apprentissage : "Tutoriel vidéo PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer