Je ne connais pas de bibliothèques ou de classes prêtes à l'emploi pour le faire en PHP sans un appel de sous-processus, mais si vous ne pouvez pas en trouver un, écrire le vôtre serait définitivement la solution.
PNG est un format de flux de blocs relativement simple, donc la recherche d'un bloc spécifique et l'extraction de certains champs d'en-tête sont triviales. Tout ce dont vous avez besoin est quelque chose qui lit et vérifie l'en-tête PNG de 8 octets 89 50 4E 47 0D 0A 1A 0A
puis alterne entre la lecture de 8 octets (longueur de bloc plus le type) et la recherche du bloc en utilisant la longueur jusqu'à ce que vous atteigniez le type de morceau vouloir.
Pour la géométrie, en supposant que le PNG suit les spécifications, voici comment cela irait:
- Lire et vérifier en-tête PNG (8 octets)
- Lire et vérifier en-tête du premier bloc (8 octets
- Succès.
type = IHDR
- Lire 8 octets supplémentaires pour la géométrie (largeur, hauteur. 4 octets)
- Si le champ autre que vous vouliez est pas IHDR, utilisez la taille de bloc de l'étape 2 chercher au bloc suivant à la recherche de l'autre domaine que vous vouliez.
Il me faudrait probablement 5 à 15 minutes pour fouetter quelque chose comme ça en Python. (J'ai fait des choses similaires avec RAR et GIF) Peut-être 15 à 25 en PHP car j'ai moins d'expérience dans les E/S de bas niveau.
montrez-nous votre code pour que nous n'ayons pas à le répliquer – stillstanding
Mine est un appel très simple à exec() pour 'identify -verbose {$ file_name}' (bien sûr avec échappement). Cet appel en lui-même prend .4 secondes. –