La détection du type d'image à partir de base64 chaîne de caractères en PHP
Est-il possible de connaître le type d'une image encodée en base64 Chaîne de caractères en PHP?
Je n'ai pas de méthode d'accès au fichier image d'origine, juste la chaîne codée. De ce que j'ai vu, imagecreatefromstring()
pouvez créer une ressource d'image à partir d'une représentation de chaîne (après avoir été décodé à partir de base64), mais il détecte automatiquement le type d'image et l'image de la ressource elle-même est un spécial représentation PHP. Dans le cas où je veux enregistrer l'image en tant que fichier de nouveau, je n'ai aucune idée si le type que je suis l'enregistrer en tant que correspondant pour le type d'origine à partir de laquelle la représentation de Chaîne a été créée.
- Il y a un double quelque part, mais je ne sais pas où.
Vous devez vous connecter pour publier un commentaire.
FileInfo peut le faire pour vous:
getimagesize()
. +1fileinfo
.Si vous ne voulez pas utiliser ces fonctions en raison de leurs dépendances, vous pouvez utiliser les premiers octets de données:
La solution donnée par @Marc B est le meilleur pour moi (si notre version de php > 5.3.0 sinon, nous pouvons utiliser la solution donnée par @Aaron Murgatroyd).
Je voudrais donner un peu plus de cette solution.
Pour obtenir le type d'image que vous pouvez le faire comme ceci :
En fait, (si vous ne le connaissez pas) le type mime pour les images est de : d'image/type de et type peut être au format png ou gif ou jpeg ou ...
Espoir qui peut aider quelqu'un, et grâce à @Marc B pour sa solution.
Pour une liste exhaustive de type mime, vous pouvez regarder ici :
La façon illustrée par @Marc B est la plus belle.
Devrait
FInfo
ne pas être disponible, le seul moyen que je connaisse est de stocker les données dans un fichier, et lancez ungetimagesize()
sur elle.Si vous connaissez un minimum sur le format de fichier de la structure, vous pourrait théoriquement regarder le haut octets du fichier jusqu'à ce que vous pourriez travailler sur ce type de fichier il est.
Par exemple, une image GIF commence toujours par la suite octets
GIF89a
. Si vous pouvez trouver cette chaîne au début du fichier, vous pouvez être raisonnablement sûr que c'est une image GIF et absolument certaine, il n'est pas tout autre format d'image. (il pourrait encore être un fichier texte si, qui arrive juste à commencer par "GIF89a'; vous auriez à analyser plus du fichier pour être absolument certain)De même, les fichiers PNG disposent de la chaîne
PNG
assez près du point de départ (ce n'est pas tout à fait au début, de nouveau, vous aurez besoin de recherche sur le format de fichier de détails pour vous aider à déterminer combien vous avez besoin de savoir pour être certain).Jpeg contiennent également reconnaissable chaînes dans leurs en-têtes, bien que ceux-ci sont plus variés et complexes. Vous voudrez peut-être regarder pour la chaîne
Exif
.Obtenir le format de fichier de définitions serait certainement vous donner plus de précision, mais selon le degré de précision que vous devez être, vous pourriez en apprendre suffisamment sur les formats de fichiers seulement par l'ouverture de certains fichiers image dans un éditeur binaire pour voir comment ils sont structurés.
Ces ressources peuvent vous aider à:
http://www.w3.org/Graphics/JPEG/
http://www.w3.org/Graphics/PNG/
Suivre PHP.NET Fileinfo :-