12
votes

Comment puis-je lire des métadonnées Png de PHP?

C'est ce que j'ai jusqu'à présent: xxx

La sortie est sorta ce que je veux, mais j'ai vraiment besoin de lignes 3-7 (inclusivement). C'est à quoi ressemble la sortie: http://silentnoobs.com/pbss/collector/test. php . J'essaie d'obtenir les données de "Screenshot punkbuster (±) traversant le pont AAO" à "résultant: w = 394 x h = 196 échantillon = 2". Je pense que ce serait assez droit de lire via le fichier et de stocker chaque ligne dans un tableau, la ligne [0] devrait être "Capture d'écran Punkbuster (±) traversée par le pont AAO", etc. Toutes ces lignes sont sujettes à changement, donc je ne peux donc pas chercher quelque chose de fini.

J'ai essayé depuis quelques jours maintenant, et cela n'aide pas beaucoup que je suis pauvre à PHP .


2 commentaires

Désolé, ni comprendre l'objectif ni la question ...


PNG est divisé en morceaux ( libpng.org/pub/png/ spécifications / 1.2 / png-chunk.html ). Et vous recherchez probablement le texte texte contenant un commentaire (noté avec le mot clé mot-clé).


4 Réponses :


18
votes

the format de fichier PNG définit qu'un document PNG est divisé en plusieurs morceaux de Les données. Vous devez donc naviguer sur votre chemin vers le morceau que vous désirez.

Les données que vous souhaitez extraire semblent être définies dans un texte (code> chunk. J'ai écrit la classe suivante pour vous permettre d'extraire des morceaux de fichiers PNG. xxx

Vous pouvez l'utiliser comme tel pour extraire le texte Chunk comme tel: xxx


2 commentaires

S'il n'a besoin que des morceaux de texte, c'est un gaspillage de mémoire pour charger l'ensemble des données PNG (i.e. Fread vs fseek ).


@Konforce: J'ai récupéré la classe à stocker uniquement des compensations de morceaux. Ils sont lus sur une base par utilisation. Je veux garder la classe ci-dessus aussi polyvalente que possible.



3
votes
<?php
  $fp = fopen('18201010338AM16390621000846.png', 'rb');
  $sig = fread($fp, 8);
  if ($sig != "\x89PNG\x0d\x0a\x1a\x0a")
  {
    print "Not a PNG image";
    fclose($fp);
    die();
  }

  while (!feof($fp))
  {
    $data = unpack('Nlength/a4type', fread($fp, 8));
    if ($data['type'] == 'IEND') break;

    if ($data['type'] == 'tEXt')
    {
       list($key, $val) = explode("\0", fread($fp, $data['length']));
       echo "<h1>$key</h1>";
       echo nl2br($val);

       fseek($fp, 4, SEEK_CUR);
    }
    else
    {
       fseek($fp, $data['length'] + 4, SEEK_CUR);
    }
  }


  fclose($fp);
?>
It assumes a basically well formed PNG file. 

0 commentaires

2
votes

1 commentaires

La meilleure réponse si tout ce dont vous avez besoin est la largeur et la hauteur.



1
votes

J'ai trouvé ce problème il y a quelques jours, j'ai donc fait une bibliothèque pour extraire les métadonnées (Exif, XMP et GPS) d'un PNG en PHP, 100% natif, j'espère que cela aide. :) pngmetadata


0 commentaires