Erkennung von Bild-Typ von base64-string in PHP
Ist es möglich, herauszufinden, die Art der ein Bild kodiert als base64-String in PHP?
Habe ich keinen Zugriff auf den original-Bild-Datei, nur die codierte Zeichenfolge. Von dem, was ich gesehen habe, imagecreatefromstring()
können, erstellen Sie eine Bild-Ressource aus einer string-Repräsentation (nachdem es entschlüsselt von base64), aber es erkennt automatisch den Bildtyp und das Bild Ressource selbst ist eine spezielle PHP-Darstellung. Falls ich wollen speichern Sie das Bild als eine Datei wieder, ich hätte keine Ahnung, ob der Typ, ich bin fertig, es entspricht den ursprünglichen Typ, von dem die String-Darstellung erstellt wurde.
Es ist eine doppelte irgendwo, aber ich weiß nicht wo.
InformationsquelleAutor Epicurus | 2011-05-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
FileInfo kann das für Sie tun:
getimagesize()
. +1Nicht sicher, was getimagesize intern verwendet, aber man kann ja hoffen.
B) er liest den header-Byte, da hat
fileinfo
.Ja, aber ich bin mir nicht sicher, was Motor getimagesize verwendet, wählen Sie die magischen zahlen. FileInfo hängt von dem externen system mime-Datenbank und kann mit jedem Dateityp. GIS verwenden könnten einige hartkodierte Magische zahlen und nur für diejenigen Aussehen speziell.
Ich bin mir ziemlich sicher, dass getimagesize ist hart codiert. Es bekommt eine Menge zusätzliche Informationen aus den Headern.
InformationsquelleAutor Marc B
Wenn Sie nicht wollen, um diese Funktionen zu verwenden, da Ihre Abhängigkeiten können Sie die ersten bytes der Daten:
Fantastisch!!! Thx
danke, es funktioniert. Für einige, die verwendet codeigniter vergessen Sie nicht, fügen Sie $this-> in jeder aufgerufenen Funktionen.
InformationsquelleAutor Aaron Murgatroyd
Die Lösung gegeben durch @Marc B ist am besten für mich (wenn unsere php version ist > 5.3.0 sonst können wir die Lösung gegeben durch @Aaron Murgatroyd).
Ich würde gerne eine kleine Ergänzung zu dieser Lösung.
Um das image type können Sie es so machen :
In der Tat (wenn Sie es nicht wissen) der mime-Typ für Bilder ist : Bild/Typ und Typ werden können png-oder gif-oder jpeg oder ...
Hoffe, dass kann jemand helfen und danke an @Marc B für seine Lösung.
Für eine vollständige Liste der mime-Typ kann man hier betrachten :
InformationsquelleAutor youssman
Den Weg gezeigt, indem Sie @Marc B am schönsten.
Sollte
FInfo
nicht verfügbar sein, ist die einzige andere Möglichkeit, die ich kenne ist das speichern von Daten in eine Datei, und führen Sie einengetimagesize()
.InformationsquelleAutor Pekka 웃
Wenn Sie wissen, eine minimale Menge über das Dateiformat, Struktur, theoretisch könnten Sie an der Spitze sehen bytes der Datei, bis Sie können, welche Art von Datei es ist.
Beispielsweise ein GIF-Bild beginnt immer mit der folgenden bytes
GIF89a
. Wenn Sie finden können, dass der string am Anfang der Datei, können Sie ziemlich sicher sein, dass es ein GIF-Bild, das absolut sicher ist nicht jedes andere Bild-format. (es könnte noch eine text-Datei, obwohl, dass passiert einfach zu starten mit "GIF89a"; Sie müssten, um zu analysieren, mehr von der Datei, um absolut sicher)Ebenfalls, PNG-Dateien, die die Zeichenfolge
PNG
ziemlich am Anfang (es ist nicht ganz die ganz am Anfang; wieder, würden Sie brauchen, um Forschung, die Datei-format Besonderheiten zu helfen, Sie bestimmen, wie viel Sie brauchen würde, um zu wissen, sicher zu sein).JPEGs enthalten auch erkennbare Zeichenfolgen im Header, obwohl diese sind vielfältiger und komplexer. Vielleicht möchten Sie sich für den string
Exif
.Bekommen Sie die Datei-format-Definitionen würde definitiv geben Ihnen mehr Genauigkeit, aber je nachdem wie genau Sie sein müssen, könnte Sie lernen, genug über die Dateien-Formate nur durch das öffnen von Bild-Dateien in einen Binär-editor, um zu sehen, wie Sie sind strukturiert.
Diese Ressourcen können Ihnen helfen:
http://www.w3.org/Graphics/JPEG/
http://www.w3.org/Graphics/PNG/
InformationsquelleAutor Spudley
Folgen PHP.NET Fileinfo :-
InformationsquelleAutor Bikash Mondal