PHP Bild in Hexa zerlegen und prüfen?

Dsimon24

Lieutenant
Registriert
Aug. 2016
Beiträge
595
Hallo zusammen,

wir haben auf unserem Server einige Bilder, die PHP-seitig verarbeitet werden.

Öffne ich diese Datei in einem Hex-Editor, so erhalte ich in den ersten 4 Zeilen folgende Werte:

Code:
 = a..JFIF......`
.......C............
.....................
.......%...........

zumindest so ähnlich.

Dies ist bei jedem Bild gleich. In der Regel.
Jetzt möchte ich gerne eine Möglichkeit finden, mit dieser ich die Bilder PHP-Seitig auf diesen
Hex-Anfang hin prüfen kann - mit dem Ziel, die Bilder aus zu sortieren, die andere Werte in
den ersten 4 Zeilen erhalten.

Leider bin ist mir absolut unklar, wie ich dies realisieren kann - hat jemand eine Idee?

VG, David
 
Da gibt es unzählige Möglichkeiten.

file_get_contents()
fopen() in Kombination mit fread() für die relevanten Bytes.

In was du das dann umwandelst um es zu vergleichen, ist ja dir überlassen.
 
Dsimon24 schrieb:
Jetzt möchte ich gerne eine Möglichkeit finden, mit dieser ich die Bilder PHP-Seitig auf diesen
Hex-Anfang hin prüfen kann - mit dem Ziel, die Bilder aus zu sortieren, die andere Werte in
den ersten 4 Zeilen erhalten.
Die C-Bibliothek libmagic bietet die funktionalität an den Typ der Datei anhand des Inhalts zu erkennen, was dann auch zuverlässige JPEG-Erkennung mit einschließt (libmagic wird ja z.B. auch vom allseits bekannten Kommandozeilenprogramm file verwendet).

Keine Ahnung, ob es da schon ne Einbindung in PHP gibt. Vermutlich ist es aber auch nicht schwer, die übers Foreign-Function-Interface mit einzubinden.

Vorteile:

  • du greifst auf eine bewährte Methode zurück
  • du kannst damit dann auch andere Dateien erkennen und zum Beispiel auch Problemlos GIFs und PNGs durchlassen

Gruß
A.
 
Das, was Du da im Hex-Editor beschreibst, nennt man den Header der Datei. Du hast recht damit, dass Du hiermit ziemlich eindeutig identifizieren kannst, ob eine Datei ein valides JPEG-Bild enthält oder nicht. Du solltest allerdings im Hex-Editor nicht auf die Textinterpretation der Bytes schauen (viele Bytes sind nicht als Text interpretierbar), sondern auf die tatsächliche Hexadezimaldarstellung.

Der Header einer JPEG-Datei ist recht einfach aufgebaut. Die Bytefolge am Anfang sollte lauten:

Code:
FF D8 FF E0 xx yy 4A 46 49 46 00

wobei die beiden Bytes xx und yy nicht konstant sind, sich also von Bild zu Bild unterscheiden können und die Größe dieses Markersegmentes angeben. Danach kommt noch etwas anderer Kram, aber diese elf Bytes sollten ausreichen für Deine Zwecke.
 
Zurück
Oben