4.11.2007

Bilder per Javascript direkt im DOM einbetten

Allgemein

Um Bilder direkt in den HTML-Baum zu schreiben, muss man das Bild base64-encoded in das src-Attribut eines img-Tags schreiben. So kann man beispielsweise ein XML mit verschiedenen Dateien befüllen und per Javascript dann dynamisch nachladen. Mit PHP würde ein möglicher Zusammenbau -ungeachtet von den normalen Sicherheitsabfängen- wie folgt aussehen:

  1. $objXmlBuilder = new XMLWriter();
  2.  
  3. $objXmlBuilder->openMemory();
  4. $objXmlBuilder->startDocument("1.0", "UTF-8");
  5. $objXmlBuilder->startElement("imageResponse");
  6. $objXmlBuilder->setIndent(true);
  7.  
  8. $objXmlBuilder->startElement("images");
  9.  
  10. for ($intCnt = 1; $intCnt <= 5; $intCnt++)
  11. {
  12. $strFilename = "datei{$intCnt}.gif";
  13. $strDir = "images/icons/32x32/";
  14. $strContent = file_get_contents($strDir.$strFilename);
  15.  
  16. $objXmlBuilder->startElement("image");
  17. $objXmlBuilder->writeAttribute("title", $strFilename);
  18. $objXmlBuilder->writeRaw(base64_encode($strContent));
  19. $objXmlBuilder->endElement();
  20. }
  21.  
  22. $objXmlBuilder->endElement();
  23.  
  24. $objXmlBuilder->endElement();
  25. $objXmlBuilder->endDocument();
  26. echo $objXmlBuilder->outputMemory();

Dieses Skript erzeugt ein XML, welches mal im Javascript verarbeiten kann. (Komplettes Beispiel unter der Box)

<?xml version="1.0" encoding="UTF-8"?>
<imageResponse>
 <images>
  <image title="datei1.gif">...</image>
  <image title="datei2.gif">...</image>
  <image title="datei3.gif">...</image>
  <image title="datei4.gif">...</image>
  <image title="datei5.gif">...</image>
 </images>
</imageResponse>

Beispiel XML mit Bildinformationen

Wenn man nun einen asynchronen Aufruf auf das PHP-Skript bzw. das XML aus Javascript startet, kann man die Bildinformationen aus den gewünschten Knoten auslesen und wie folgt zuweisen: "data:MIME-Type;CODIERUNG,DATEN"

  1. function handleResponse(objResponse)
  2. {
  3. try
  4. {
  5. objXml = objResponse.responseXML;
  6. /// weiter auslesen je nach Form mit z.B.
  7. /// xxx.getElementsByTagName("image")
  8. strBildDaten = objXmlKnoten.textContent;
  9. document.getElementById("meinBild1").src="data:image/gif;base64,"
  10. + strBildDaten;
  11. }
  12. catch (objException) { /* error_log */ }
  13. }

Wenn man nun noch intelligent die Bilddaten im Speicher hält, muss man sie kein zweites Mal laden.

Hinterlasse einen Kommentar

Dein Kommentar:

Kategorien