Bilder direkt in PHP-Dateien einbetten

Das habe ich mir schon oft gewünscht, da es kleine Skripte enorm aufwertet wenn diese mit ein wenig Grafik versehen werden. Durch einen kleinen Trick ist es möglich, Grafikdateien direkt in die PHP-Datei einzubetten!

1. PNG-Datei erzeugen

Zunächst brauchen wir eine PNG-Datei, die für die Einbettung vorbereitet werden soll. Ich habe mir etwas von Photocase geschnappt und eine 50×50 Pixel Grafik zugeschnitten.

2. PNG in Base64 umwandeln

Diese Binärdatei wird jetzt in Base64 enkodiert. Dieses Format wurde übrigens entwickelt, um Binärdaten in E-Mails etc. unterbringen zu können, ohne daß diese dabei verstümmelt oder zerstört werden. Mein PHP-Skript sieht so aus:

<?php  
  $file = "bild.png";  
  if (!$handle = fopen($file, r)) die("Konnte Datei nicht oeffnen!");  
  while ($str = fread($handle, filesize($file))) {  
    echo base64_encode($str);  
  }  
?>

Beim Aufruf der Datei (die Bilddatei muss natürlich im gleichen Ordner liegen) bekommt man einen langen String zurück, den man per Copy & Paste in die endgültige Datei einfügt.

3. Bild wiederherstellen

Um das Bild später in der PHP-Datei zu benutzen, bedienen wir uns einer einfachen Abfrage der GET-Parameter:

<?php  
if (isset($_GET['bild'])) {  
  $png_data = "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";  
  header('Content-type: image/png');  
  echo base64_decode($png_data);  
  exit;  
}  

echo "<img src='" . $_SERVER['PHP_SELF'] . "?bild' alt='Base64 Bild' />";  
?>

Durch das wiederholen dieser Schritte und das verändern der GET-Parameter können so beliebig viele Bilder in eine PHP-Datei eingebettet werden. Es sollte klar sein, daß die Datei irgendwann recht groß wird. Für eine Hintergrundgrafik und ein paar Icons reicht es aber.

Viel Spaß beim ausprobieren!

Getagged mit: , ,

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.