Obtenir les métadonnées étendues de l'image, exif ou iptc selon la disponibilité.

Description

Récupère les métadonnées EXIF ouverture, crédit, appareil photo, légende, copyright, iso created_timestamp, focal_length, shutter_speed et titre.

Les métadonnées IPTC qui sont récupérées sont APP13, crédit, appareil photo, date et heure de création, légende, droit d'auteur et titre. Sont également inclus FNumber, Model, DateTimeDigitized, FocalLength, ISOSpeedRatings, et ExposureTime.

Paramètres

$file

(chaîne de caractères)(Obligatoire)

Retour

(tableau|faux) Tableau de métadonnées d'image en cas de succès, false en cas d'échec.

Plus d'informations

Note supplémentaire pour le retour

Les éléments retournés dans le tableau sont :

["aperture"]
(string) Défini comme le champ EXIF FNumber.

["credit"]
(string) Défini comme la première valeur non vide trouvée en parcourant les champs suivants :

  1. Champ de crédit IPTC (2#110)
  2. Champ créateur IPTC (2#080)
  3. Champ EXIF Artiste
  4. Champ EXIF Auteur

["camera"]
(string) Défini comme le champ EXIF Model.

["caption"]
(string) Défini à une valeur non vide de l'un des champs suivants (voir le code source pour la logique précise impliquée) :

  1. Champ de description IPTC (2#120)
  2. Champ EXIF UserComment si [“title”] n'est pas défini ET que EXIF:ImageDescription comporte moins de 80 caractères.
  3. Champ EXIF ImageDescription si [“title”] est défini OU EXIF:ImageDescription comporte plus de 80 caractères.
  4. Champ Commentaires EXIF si [“title”] n'est pas égal à EXIF:Comments

["created_timestamp"]
(string) Défini à la première valeur non vide trouvée en parcourant les champs suivants :

  1. Champ EXIF DateTimeDigitized (date)
  2. Champs date et heure IPTC (2#055 et 2#060)

["copyright"]
(string) Défini comme la première valeur non vide trouvée en parcourant les champs suivants :

  1. Champ Copyright IPTC (2#116)
  2. Champ de copyright EXIF

["focal_length"]
(string) Défini comme le champ FocalLength EXIF.

["iso"]
(string) Défini sur le champ EXIF ISOSpeedRatings.

["shutter_speed"]
(string) Définissez le champ EXIF ExposureTime.

["title"]
(string) Défini sur la première valeur non vide trouvée en parcourant les champs suivants :

  1. Champ Titre IPTC (2#105)
  2. Champ Titre IPTC (2#005)
  3. Champ Description IPTC (2#120) mais seulement si moins de 80 caractères.
  4. Champ Titre EXIF
  5. Champ EXIF ImageDescription mais seulement si moins de 80 caractères.

La valeur (2#nnn) indiquée après chaque champ IPTC (ci-dessus) est la clé du tableau renvoyé par la fonction iptcparse de PHP pour ce champ IPTC particulier.

Source

Fichier : wp-admin/includes/image.php

functionwp_read_image_metadata($file){if(!file_exists($file)){returnfalse;}list(,,$image_type)=wp_getimagesize($file);/*
	 * EXIF contains a bunch of data we'll probably never need formatted in ways
	 * that are difficult to use. We'll normalize it and just extract the fields
	 * that are likely to be useful. Fractions and numbers are converted to
	 * floats, dates to unix timestamps, and everything else to strings.
	 */$meta=array('aperture'=>0,'credit'=>'','camera'=>'','caption'=>'','created_timestamp'=>0,'copyright'=>'','focal_length'=>0,'iso'=>0,'shutter_speed'=>0,'title'=>'','orientation'=>0,'keywords'=>array(),);$iptc=array();/*
	 * Read IPTC first, since it might contain data not available in exif such
	 * as caption, description etc.
	 */if(is_callable('iptcparse')){wp_getimagesize($file,$info);if(!empty($info['APP13'])){if(// Skip when running unit tests.!defined('WP_RUN_CORE_TESTS')&&// Process without silencing errors when in debug mode.defined('WP_DEBUG')&&WP_DEBUG){$iptc=iptcparse($info['APP13']);}else{// phpcs:ignore WordPress.PHP.NoSilencedErrors -- Silencing notice and warning is intentional. See https://core.trac.wordpress.org/ticket/42480$iptc= @iptcparse($info['APP13']);}// Headline, "A brief synopsis of the caption".if(!empty($iptc['2#105'][0])){$meta['title']=trim($iptc['2#105'][0]);/*
				* Title, "Many use the Title field to store the filename of the image,
				* though the field may be used in many ways".
				*/}elseif(!empty($iptc['2#005'][0])){$meta['title']=trim($iptc['2#005'][0]);}if(!empty($iptc['2#120'][0])){// Description / legacy caption.$caption=trim($iptc['2#120'][0]);mbstring_binary_safe_encoding();$caption_length=strlen($caption);reset_mbstring_encoding();if(empty($meta['title'])&&$caption_length<80){// Assume the title is stored in 2:120 if it's short.$meta['title']=$caption;}$meta['caption']=$caption;}if(!empty($iptc['2#110'][0])){// Credit.$meta['credit']=trim($iptc['2#110'][0]);}elseif(!empty($iptc['2#080'][0])){// Creator / legacy byline.$meta['credit']=trim($iptc['2#080'][0]);}if(!empty($iptc['2#055'][0])&&!empty($iptc['2#060'][0])){// Created date and time.$meta['created_timestamp']=strtotime($iptc['2#055'][0].' '.$iptc['2#060'][0]);}if(!empty($iptc['2#116'][0])){// Copyright.$meta['copyright']=trim($iptc['2#116'][0]);}if(!empty($iptc['2#025'][0])){// Keywords array.$meta['keywords']=array_values($iptc['2#025']);}}}$exif=array();/**
	 * Filters the image types to check for exif data.
	 *
	 * @since 2.5.0
	 *
	 * @param array $image_types Image types to check for exif data.
	 */$exif_image_types=apply_filters('wp_read_image_metadata_types',array(IMAGETYPE_JPEG,IMAGETYPE_TIFF_II,IMAGETYPE_TIFF_MM));if(is_callable('exif_read_data')&&in_array($image_type,$exif_image_types,true)){if(// Skip when running unit tests.!defined('WP_RUN_CORE_TESTS')&&// Process without silencing errors when in debug mode.defined('WP_DEBUG')&&WP_DEBUG){$exif=exif_read_data($file);}else{// phpcs:ignore WordPress.PHP.NoSilencedErrors -- Silencing notice and warning is intentional. See https://core.trac.wordpress.org/ticket/42480$exif= @exif_read_data($file);}if(!empty($exif['ImageDescription'])){mbstring_binary_safe_encoding();$description_length=strlen($exif['ImageDescription']);reset_mbstring_encoding();if(empty($meta['title'])&&$description_length<80){// Assume the title is stored in ImageDescription.$meta['title']=trim($exif['ImageDescription']);}if(empty($meta['caption'])&&!empty($exif['COMPUTED']['UserComment'])){$meta['caption']=trim($exif['COMPUTED']['UserComment']);}if(empty($meta['caption'])){$meta['caption']=trim($exif['ImageDescription']);}}elseif(empty($meta['caption'])&&!empty($exif['Comments'])){$meta['caption']=trim($exif['Comments']);}if(empty($meta['credit'])){if(!empty($exif['Artist'])){$meta['credit']=trim($exif['Artist']);}elseif(!empty($exif['Author'])){$meta['credit']=trim($exif['Author']);}}if(empty($meta['copyright'])&&!empty($exif['Copyright'])){$meta['copyright']=trim($exif['Copyright']);}if(!empty($exif['FNumber'])){$meta['aperture']=round(wp_exif_frac2dec($exif['FNumber']),2);}if(!empty($exif['Model'])){$meta['camera']=trim($exif['Model']);}if(empty($meta['created_timestamp'])&&!empty($exif['DateTimeDigitized'])){$meta['created_timestamp']=wp_exif_date2ts($exif['DateTimeDigitized']);}if(!empty($exif['FocalLength'])){$meta['focal_length']=(string)wp_exif_frac2dec($exif['FocalLength']);}if(!empty($exif['ISOSpeedRatings'])){$meta['iso']=is_array($exif['ISOSpeedRatings'])?reset($exif['ISOSpeedRatings']):$exif['ISOSpeedRatings'];$meta['iso']=trim($meta['iso']);}if(!empty($exif['ExposureTime'])){$meta['shutter_speed']=(string)wp_exif_frac2dec($exif['ExposureTime']);}if(!empty($exif['Orientation'])){$meta['orientation']=$exif['Orientation'];}}foreach(array('title','caption','credit','copyright','camera','iso')as$key){if($meta[$key]&&!seems_utf8($meta[$key])){$meta[$key]=utf8_encode($meta[$key]);}}foreach($meta['keywords']as$key=>$keyword){if(!seems_utf8($keyword)){$meta['keywords'][$key]=utf8_encode($keyword);}}$meta=wp_kses_post_deep($meta);/**
	 * Filters the array of meta data read from an image's exif data.
	 *
	 * @since 2.5.0
	 * @since 4.4.0 The `$iptc` parameter was added.
	 * @since 5.0.0 The `$exif` parameter was added.
	 *
	 * @param array  $meta       Image meta data.
	 * @param string $file       Path to image file.
	 * @param int    $image_type Type of image, one of the `IMAGETYPE_XXX` constants.
	 * @param array  $iptc       IPTC data.
	 * @param array  $exif       EXIF data.
	 */returnapply_filters('wp_read_image_metadata',$meta,$file,$image_type,$iptc,$exif);}

Related

Utilise

Utilisations Description
wp-includes/media.php : wp_getimagesize()

Permet à la getimagesize() de PHP d'être débuggable lorsque cela est nécessaire.

wp-includes/kses.php : wp_kses_post_deep()

Navigue dans un tableau, un objet ou un scalaire, et assainit le contenu pour les balises HTML autorisées pour le contenu du post.

wp-admin/includes/image.php : wp_exif_frac2dec()

Convertit une chaîne de fraction en décimale.

wp-admin/includes/image.php : wp_exif_date2ts()

Convertit le format de date exif en un timestamp unix.

wp-admin/includes/image.php : wp_read_image_metadata_types

Filtre les types d'images à vérifier pour les données exif.

wp-admin/includes/image.php : wp_read_image_metadata

Filtre le tableau des métadonnées lues à partir des données exif d'une image.

wp-includes/formatting.php : seems_utf8()

Vérifie si une chaîne de caractères est encodée en utf8.

wp-includes/functions.php : mbstring_binary_safe_encoding()

Définit l'encodage interne de mbstring à un encodage binaire sûr lorsque func_overload est activé.

wp-includes/functions.php : reset_mbstring_encoding()

Réinitialise l'encodage interne de mbstring à un encodage précédemment défini par les utilisateurs.

wp-includes/plugin.php : apply_filters()

Appelle les fonctions de rappel qui ont été ajoutées à un crochet de filtre.

Utilisé par

Utilisé par Description
wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php : WP_REST_Attachments_Controller::insert_attachment()

Insère le post de la pièce jointe dans la base de données. Ne met pas à jour la méta pièce jointe.

wp-admin/includes/image.php : wp_create_image_subsizes()

Crée des sous-dimensions d'image, ajoute les nouvelles données aux méta de l'image. sizes tableau, et met à jour les métadonnées de l'image.

wp-admin/includes/media.php : media_handle_upload()

Enregistre un fichier soumis depuis une requête POST et crée un post de pièce jointe pour celui-ci.

wp-admin/includes/media.php : media_handle_sideload()

Traite un fichier chargé latéralement de la même manière qu'un fichier téléchargé est traité par media_handle_upload().

Changelog

Version Description
2.5.0 Introduit.