<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/ref.exif.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'de',
  ),
  'this' => 
  array (
    0 => 'function.exif-read-data.php',
    1 => 'exif_read_data',
    2 => 'Liest die EXIF-Header einer Bilddatei aus',
  ),
  'up' => 
  array (
    0 => 'ref.exif.php',
    1 => 'Exif-Funktionen',
  ),
  'prev' => 
  array (
    0 => 'function.exif-imagetype.php',
    1 => 'exif_imagetype',
  ),
  'next' => 
  array (
    0 => 'function.exif-tagname.php',
    1 => 'exif_tagname',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'de',
    'path' => 'reference/exif/functions/exif-read-data.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.exif-read-data" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">exif_read_data</h1>
  <p class="verinfo">(PHP 4 &gt;= 4.2.0, PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">exif_read_data</span> &mdash; <span class="dc-title">Liest die <abbr title="Exchangeable Image File ">EXIF</abbr>-Header einer Bilddatei aus</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-function.exif-read-data-description">
  <h3 class="title">Beschreibung</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>exif_read_data</strong></span>(<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><span class="type"><a href="language.types.resource.php" class="type resource">resource</a></span>|<span class="type"><a href="language.types.string.php" class="type string">string</a></span></span> <code class="parameter">$file</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="language.types.string.php" class="type string">string</a></span></span> <code class="parameter">$required_sections</code><span class="initializer"> = <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong></span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> <code class="parameter">$as_arrays</code><span class="initializer"> = <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong></span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span> <code class="parameter">$read_thumbnail</code><span class="initializer"> = <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong></span></span><br>): <span class="type"><span class="type"><a href="language.types.array.php" class="type array">array</a></span>|<span class="type"><a href="language.types.singleton.php" class="type false">false</a></span></span></div>

  <p class="simpara">
   <span class="function"><strong>exif_read_data()</strong></span> liest die
   <abbr title="Exchangeable Image File ">EXIF</abbr>-Header aus einer Bilddatei aus. Auf diese Weise
   können die Metadaten ausgelesen werden, die mit Digitalkameras erzeugt
   wurden.
  </p>
  <p class="simpara">
   <abbr title="Exchangeable Image File ">EXIF</abbr>-Header kommen normalerweise bei JPEG/TIFF-Bildern
   vor, die von Digitalkameras gemacht wurden. Leider hat jeder
   Kamerahersteller eine andere Vorstellung davon, wie man die Bilder
   beschreibt, sodass man sich nicht darauf verlassen kann, das ein bestimmter
   Exif-Header vorhanden ist.
  </p>
  <p class="simpara">
   <code class="literal">Height</code> und <code class="literal">Width</code> werden genauso wie
   <span class="function"><a href="function.getimagesize.php" class="function">getimagesize()</a></span> berechnet. Diese Werte dürfen also nicht
   Teil von irgendwelchen Headern sein, die zurückgegeben werden. Ferner ist
   <code class="literal">html</code> ein Höhen/Breiten-Textstring für den Gebrauch in
   normalem <abbr title="Hyper Text Markup Language">HTML</abbr>.
  </p>
  <p class="simpara">
   Wenn ein Exif-Header einen Copyrightvermerk beinhaltet, kann dieser selbst
   aus zwei Werten bestehen. Da die Lösung im Exif-2.10 -Standard nicht
   konsistent ist, liefert der <code class="literal">COMPUTED</code>-Bereich die beiden
   Einträge <code class="literal">Copyright.Photographer</code> und
   <code class="literal">Copyright.Editor</code>, während die
   <code class="literal">IFD</code>-Bereiche aus einem Byte-Array besteht, in dem die
   beiden Werte durch ein NULL-Zeichen getrennt sind. Wenn der Datentyp falsch
   ist, ist nur der erste Eintrag vorhanden (normales Verhalten von Exif).
   <code class="literal">COMPUTED</code> beinhaltet auch einen
   <code class="literal">Copyright</code>-Eintrag. Dieser entspricht entweder dem
   originalen Copyright-String oder er besteht aus einer kommaseparierten
   Liste von Foto- und Herausgeber-Copyright.
  </p>
  <p class="simpara">
   Der Tag <code class="literal">UserComment</code> hat das gleiche Problem, wie das
   Copyright-Tag. Er kann zwei Werte speichern. Als erstes die verwendete
   Kodierung und als zweites den Wert selbst. Wenn dem so ist, enthält der
   <code class="literal">IFD</code>-Bereich nur die Kodierung oder ein Byte-Array. Der
   <code class="literal">COMPUTED</code>-Bereich speichert beide in den Einträgen
   <code class="literal">UserCommentEncoding</code> und <code class="literal">UserComment</code>.
   Der Eintrag <code class="literal">UserComment</code> ist in beiden Fällen verfügbar.
   Er sollte also dem Eintrag im <code class="literal">IFD0</code>-Bereich vorgezogen
   werden.
  </p>
  <p class="simpara">
   <span class="function"><strong>exif_read_data()</strong></span> validiert auch EXIF-Datentags
   entsprechend der EXIF-Spezifikationen
   (<a href="http://exif.org/Exif2-2.PDF" class="link external">&raquo;&nbsp;http://exif.org/Exif2-2.PDF</a>, Seite 20).
  </p>
 </div>


 <div class="refsect1 parameters" id="refsect1-function.exif-read-data-parameters">
  <h3 class="title">Parameter-Liste</h3>
  <dl>
   
    <dt><code class="parameter">file</code></dt>
    <dd>
     <span class="simpara">
      Der Ort der Bilddatei. Dies kann entweder der Pfad der Datei
      (Stream-Wrapper werden wie üblich ebenso unterstützt) oder eine
      Stream-<span class="type"><a href="language.types.resource.php" class="link">Ressource</a></span> sein.
     </span>
    </dd>
   
   
    <dt><code class="parameter">required_sections</code></dt>
    <dd>
     <p class="para">
      Ist eine kommaseparierte Liste von Bereichen, die in der Datei
      vorhanden sein müssen, um das Rückgabe-<span class="type"><a href="language.types.array.php" class="link">Array</a></span> zu
      erzeugen. Wenn keiner der geforderten Bereiche gefunden werden kann,
      wird <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> zurückgegeben.
      <table class="doctable informaltable">
       
        <tbody class="tbody">
         <tr>
          <td>FILE</td>
          <td>FileName, FileSize, FileDateTime, SectionsFound</td>
         </tr>

         <tr>
          <td>COMPUTED</td>
          <td>
           html, Width, Height, IsColor und andere, wenn vorhanden. Height
           und Width werden genauso wie <span class="function"><a href="function.getimagesize.php" class="function">getimagesize()</a></span>
           berechnet. Diese Werte dürfen also nicht Teil von irgendwelchen
           Headern sein, die zurückgegeben werden. Ferner ist
           <code class="literal">html</code> ein Höhen/Breiten-Textstring für den
           Gebrauch in normalem <abbr title="Hyper Text Markup Language">HTML</abbr>.
          </td>
         </tr>

         <tr>
          <td>ANY_TAG</td>
          <td>
           Jegliche Informationen, die ein Tag besitzen, z. B.
           <code class="literal">IFD0</code>, <code class="literal">EXIF</code>, ...
          </td>
         </tr>

         <tr>
          <td>IFD0</td>
          <td>
           Alle IFD0-Daten mit Tag. In normalen Bilddateien beinhalten diese
           die Bildgröße usw.
          </td>
         </tr>

         <tr>
          <td>THUMBNAIL</td>
          <td>
           Wenn eine Datei ein zweites <code class="literal">IFD</code> enthält, wird
           angenommen, dass sie ein Miniaturbild enthält. Alle Informationen
           mit Tags über das eingebettete Miniaturbild werden in diesem
           Bereich gespeichert.
          </td>
         </tr>

         <tr>
          <td>COMMENT</td>
          <td>Kommentarheader des JPEG-Bildes.</td>
         </tr>

         <tr>
          <td>EXIF</td>
          <td>
           Der EXIF-Bereich ist ein Unterbereich von <code class="literal">IFD0</code>.
           Er enthält detailliertere Information über das Bild. Die meisten
           dieser Einträge beziehen sich auf die Digitalkamera.
          </td>
         </tr>

        </tbody>
       
      </table>

     </p>
    </dd>
   
   
    <dt><code class="parameter">as_arrays</code></dt>
     <dd>
     <span class="simpara">
      Definiert ob jeder Bereich ein Array wird oder nicht. Die
      <code class="parameter">required_sections</code> <code class="literal">COMPUTED</code>,
      <code class="literal">THUMBNAIL</code> und <code class="literal">COMMENT</code> werden
      immer zu Arrays, da die Namen der Werte mit denen anderer Bereiche
      kollidieren können.
     </span>
    </dd>
   
   
    <dt><code class="parameter">read_thumbnail</code></dt>
    <dd>
     <span class="simpara">
      Bei <strong><code><a href="reserved.constants.php#constant.true">true</a></code></strong> wird das Miniaturbild ausgelesen, ansonsten nur die Daten
      der Tags.
     </span>
    </dd>
   
  </dl>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-function.exif-read-data-returnvalues">
  <h3 class="title">Rückgabewerte</h3>
  <p class="simpara">
   Gibt ein assoziatives <span class="type"><a href="language.types.array.php" class="link">Array</a></span> zurück, bei dem der Arrayindex
   den Headernamen entspricht und der Arraywert die Werte enthält, die mit
   diesen Headern in Verbindung stehen. Wenn keine Daten zurückgegeben werden
   können, gibt <span class="function"><strong>exif_read_data()</strong></span> <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> zurück.
  </p>
 </div>


 <div class="refsect1 errors" id="refsect1-function.exif-read-data-errors">
  <h3 class="title">Fehler/Exceptions</h3>
  <p class="simpara">
   Fehler der Stufe <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> und/oder
   <strong><code><a href="errorfunc.constants.php#constant.e-notice">E_NOTICE</a></code></strong> können bei nicht unterstützten Tags oder
   anderen potentiellen Fehlerbedingungen ausgelöst werden, aber die Funktion
   versucht trotzdem, alle verständlichen Informationen zu lesen.
  </p>
 </div>


 <div class="refsect1 changelog" id="refsect1-function.exif-read-data-changelog">
  <h3 class="title">Changelog</h3>
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>Version</th>
      <th>Beschreibung</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>8.0.0</td>
      <td>
       <code class="parameter">required_sections</code> ist jetzt nullable
       (akzeptiert den <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>-Wert).
      </td>
     </tr>

     <tr>
      <td>7.2.0</td>
      <td>
       Der Parameter <code class="parameter">file</code> unterstützt jetzt sowohl
       lokale Dateien als auch Stream-Ressourcen.
      </td>
     </tr>

     <tr>
      <td>7.2.0</td>
      <td>
       <p class="para">
        Unterstützung für folgende EXIF-Formate wurde hinzugefügt:
        <ul class="simplelist">
         <li>Samsung</li>
         <li>DJI</li>
         <li>Panasonic</li>
         <li>Sony</li>
         <li>Pentax</li>
         <li>Minolta</li>
         <li>Sigma/Foveon</li>
         <li>AGFA</li>
         <li>Kyocera</li>
         <li>Ricoh</li>
         <li>Epson</li>
        </ul>
       </p>
      </td>
     </tr>

    </tbody>
   
  </table>

 </div>


 <div class="refsect1 examples" id="refsect1-function.exif-read-data-examples">
  <h3 class="title">Beispiele</h3>
  <div class="example" id="example-1">
   <p><strong>Beispiel #1 <span class="function"><strong>exif_read_data()</strong></span>-Beispiel</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"test1.jpg:&lt;br /&gt;\n"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$exif </span><span style="color: #007700">= </span><span style="color: #0000BB">exif_read_data</span><span style="color: #007700">(</span><span style="color: #DD0000">'tests/test1.jpg'</span><span style="color: #007700">, </span><span style="color: #DD0000">'IFD0'</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">$exif</span><span style="color: #007700">===</span><span style="color: #0000BB">false </span><span style="color: #007700">? </span><span style="color: #DD0000">"Keine Headerdaten gefunden.&lt;br /&gt;\n" </span><span style="color: #007700">: </span><span style="color: #DD0000">"Bild beinhaltet Header&lt;br /&gt;\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$exif </span><span style="color: #007700">= </span><span style="color: #0000BB">exif_read_data</span><span style="color: #007700">(</span><span style="color: #DD0000">'tests/test2.jpg'</span><span style="color: #007700">, </span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #0000BB">true</span><span style="color: #007700">);<br />echo </span><span style="color: #DD0000">"test2.jpg:&lt;br /&gt;\n"</span><span style="color: #007700">;<br />foreach (</span><span style="color: #0000BB">$exif </span><span style="color: #007700">as </span><span style="color: #0000BB">$key </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$section</span><span style="color: #007700">) {<br />    foreach (</span><span style="color: #0000BB">$section </span><span style="color: #007700">as </span><span style="color: #0000BB">$name </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$val</span><span style="color: #007700">) {<br />        echo </span><span style="color: #DD0000">"</span><span style="color: #0000BB">$key</span><span style="color: #DD0000">.</span><span style="color: #0000BB">$name</span><span style="color: #DD0000">: </span><span style="color: #0000BB">$val</span><span style="color: #DD0000">&lt;br /&gt;\n"</span><span style="color: #007700">;<br />    }<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>
    Der erste Aufruf schlägt fehl, da das Bild keine Headerinformationen
    enthält.
   </p></div>
   <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt
eine ähnliche Ausgabe wie:</p></div>
   <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">test1.jpg:
Keine Headerdaten gefunden.
test2.jpg:
FILE.FileName: test2.jpg
FILE.FileDateTime: 1017666176
FILE.FileSize: 1240
FILE.FileType: 2
FILE.SectionsFound: ANY_TAG, IFD0, THUMBNAIL, COMMENT
COMPUTED.html: width=&quot;1&quot; height=&quot;1&quot;
COMPUTED.Height: 1
COMPUTED.Width: 1
COMPUTED.IsColor: 1
COMPUTED.ByteOrderMotorola: 1
COMPUTED.UserComment: Exif test image.
COMPUTED.UserCommentEncoding: ASCII
COMPUTED.Copyright: Photo (c) M.Boerger, Edited by M.Boerger.
COMPUTED.Copyright.Photographer: Photo (c) M.Boerger
COMPUTED.Copyright.Editor: Edited by M.Boerger.
IFD0.Copyright: Photo (c) M.Boerger
IFD0.UserComment: ASCII
THUMBNAIL.JPEGInterchangeFormat: 134
THUMBNAIL.JPEGInterchangeFormatLength: 523
COMMENT.0: Comment #1.
COMMENT.1: Comment #2.
COMMENT.2: Comment #3end
THUMBNAIL.JPEGInterchangeFormat: 134
THUMBNAIL.Thumbnail.Height: 1
THUMBNAIL.Thumbnail.Height: 1</pre>
</div>
   </div>
  </div>
  <div class="example" id="example-2">
   <p><strong>Beispiel #2 <span class="function"><strong>exif_read_data()</strong></span> mit Streams; verfügbar von PHP 7.2.0 an</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// Öffne die Datei im Binärmodus<br /></span><span style="color: #0000BB">$fp </span><span style="color: #007700">= </span><span style="color: #0000BB">fopen</span><span style="color: #007700">(</span><span style="color: #DD0000">'/path/to/image.jpg'</span><span style="color: #007700">, </span><span style="color: #DD0000">'rb'</span><span style="color: #007700">);<br /><br />if (!</span><span style="color: #0000BB">$fp</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">'Fehler: Konnte das Bild nicht fürs Lesen öffnen'</span><span style="color: #007700">;<br />    exit;<br />}<br /><br /></span><span style="color: #FF8000">// Versuche die Exif-Header zu lesen<br /></span><span style="color: #0000BB">$headers </span><span style="color: #007700">= </span><span style="color: #0000BB">exif_read_data</span><span style="color: #007700">(</span><span style="color: #0000BB">$fp</span><span style="color: #007700">);<br /><br />if (!</span><span style="color: #0000BB">$headers</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">'Fehler: Konnte die Exif-Header nicht lesen'</span><span style="color: #007700">;<br />    exit;<br />}<br /><br /></span><span style="color: #FF8000">// Gib die 'COMPUTED'-Header aus<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">'EXIF Header:' </span><span style="color: #007700">. </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /><br />foreach (</span><span style="color: #0000BB">$headers</span><span style="color: #007700">[</span><span style="color: #DD0000">'COMPUTED'</span><span style="color: #007700">] as </span><span style="color: #0000BB">$header </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$value</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">printf</span><span style="color: #007700">(</span><span style="color: #DD0000">' %s =&gt; %s%s'</span><span style="color: #007700">, </span><span style="color: #0000BB">$header</span><span style="color: #007700">, </span><span style="color: #0000BB">$value</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">);<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>Das oben gezeigte Beispiel erzeugt
eine ähnliche Ausgabe wie:</p></div>
   <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">EXIF Header:
 Height =&gt; 576
 Width =&gt; 1024
 IsColor =&gt; 1
 ByteOrderMotorola =&gt; 0
 ApertureFNumber =&gt; f/5.6
 UserComment =&gt;
 UserCommentEncoding =&gt; UNDEFINED
 Copyright =&gt; Denis
 Thumbnail.FileType =&gt; 2
 Thumbnail.MimeType =&gt; image/jpeg</pre>
</div>
   </div>
  </div>
 </div>


 <div class="refsect1 notes" id="refsect1-function.exif-read-data-notes">
  <h3 class="title">Anmerkungen</h3>
  <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
   <span class="simpara">
    Ist <a href="ref.mbstring.php" class="link">mbstring</a> aktiviert, wird exif
    versuchen den Unicode zu verarbeiten, und einen Zeichensatz gemäß
    <a href="exif.configuration.php#ini.exif.decode-unicode-motorola" class="link">exif.decode_unicode_motorola</a>
    und <a href="exif.configuration.php#ini.exif.decode-unicode-intel" class="link">exif.decode_unicode_intel</a>
    zu wählen. Die exif-Erweiterung versucht nicht, die Kodierung selbst zu
    ermitteln, so dass es die Aufgabe des Benutzers ist, die gewünschte
    Kodierung durch Setzen einer der beiden ini-Direktiven anzugeben, bevor
    <span class="function"><strong>exif_read_data()</strong></span> aufgerufen wird.
   </span>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">Hinweis</strong>: 
   <span class="simpara">
    Wird der Parameter <code class="parameter">file</code> verwendet, um einen Stream
    an diese Funktion zu übergeben, dann muss der Stream suchbar sein. Es ist
    zu beachten, dass die Position des Dateizeigers nach dem Aufruf dieser
    Funktion unverändert ist.
   </span>
  </p></blockquote>
 </div>


 <div class="refsect1 seealso" id="refsect1-function.exif-read-data-seealso">
  <h3 class="title">Siehe auch</h3>
  <ul class="simplelist">
   <li><span class="function"><a href="function.exif-thumbnail.php" class="function" rel="rdfs-seeAlso">exif_thumbnail()</a> - Liest das eingebettete Miniaturbild eines Bildes aus</span></li>
   <li><span class="function"><a href="function.getimagesize.php" class="function" rel="rdfs-seeAlso">getimagesize()</a> - Liefert die Gr&ouml;&szlig;e einer Grafik</span></li>
   <li><a href="wrappers.php" class="xref">Unterst&uuml;tzte Protokolle und Wrapper</a></li>
  </ul>
 </div>


</div><?php manual_footer($setup); ?>