PowerPoint - T1S2-Bild-Ressourcen - EntwicklerCamp
PowerPoint - T1S2-Bild-Ressourcen - EntwicklerCamp
PowerPoint - T1S2-Bild-Ressourcen - EntwicklerCamp
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Bild</strong>-<strong>Ressourcen</strong><br />
Dirk Alicke<br />
Südwestrundfunk Stuttgart<br />
www.swr.de<br />
Seite 1
• Voraussetzungen<br />
• Prinzip<br />
• Grundlagen (Base64)<br />
• Import<br />
• Export<br />
• Tools<br />
Was erwartet Sie?<br />
Seite 2
Intension<br />
• für Endanwender konfigurierbare<br />
Ansichtssymbole<br />
• für Endanwender konfigurierbare Grafiken in<br />
Dokumenten<br />
Seite 3
• Notes mind. 6.x<br />
Die Klassen<br />
Voraussetzungen<br />
- NotesDXLExporter,<br />
- NotesDXLImporter,<br />
- NotesNoteCollection,<br />
stehen erst ab Notes 6.x zur Verfügung.<br />
Seite 4
Prinzip für den Import<br />
Quelle: <strong>Bild</strong>-Datei (gif, jpg)<br />
Quelle nach Base64 codieren<br />
Seite 5
Prinzip für den Import (Fortsetzung)<br />
DXL-Datei aufbauen<br />
DXL-Datei importieren<br />
Seite 6
Historisches zu Base64<br />
Die ursprüngliche Fassung von SMTP war nur<br />
für 7-Bit ASCII-Zeichen ausgelegt.<br />
Damit binäre Dateien verschickt werden<br />
können, wurde Base64 entwickelt.<br />
Seite 7
Base64 Codierung<br />
• Codierung von 8-Bit-Binärdaten in eine<br />
Zeichenfolge<br />
• Zeichenfolge besteht aus den ASCII-Zeichen<br />
A-Z, a-z, 0-9, +, /, =<br />
• = dient dabei nur als Auffüllzeichen<br />
• wird z.B. im MIME-Format verwendet<br />
• Verhältnis des Speicherplatzes ca. 3:4<br />
Seite 8
Base64 Codierung Funktionsweise<br />
• Quelle: binäre Datei mit 1 Byte = 8 Bit<br />
• Ziel: Base64-Codierung mit 64 möglichen<br />
Zuständen<br />
(6 Bit entspricht 2 6 )<br />
• Quelldatei in Abschnitte zu 6 Bit zerlegen<br />
• Ggf. fehlende letzte Bits durch ein „=“ ersetzen<br />
Ersetzungstabelle<br />
Wert<br />
Zeichen<br />
0<br />
A<br />
1<br />
B<br />
…<br />
…<br />
25<br />
Z<br />
26<br />
a<br />
…<br />
…<br />
51<br />
z<br />
52<br />
0<br />
…<br />
…<br />
61<br />
9<br />
62<br />
+<br />
63<br />
/<br />
Seite 9
• Quelle: „EC08“<br />
Base64 Codierung Beispiel<br />
• Zerlegen in ASCII-CODE:<br />
69, 67, 48, 56, 0, 0<br />
• Binärschreibweise (8 Bit):<br />
01000101.01000011.00110000.00111000.00000000.00000000<br />
• Aufteilung in 6 Bit-Blöcke:<br />
010001.010100.001100.110000.001110.000000.000000.000000<br />
• Umwandlung in Dezimalzahlen:<br />
17, 20, 12, 48, 14, 0, 0, 0<br />
Seite 10
Base64 Codierung Beispiel (Fortsetzung)<br />
• Umwandlung in Dezimalzahlen:<br />
• Ersetzen der Zahlen:<br />
17, 20, 12, 48, 14, 0, 0, 0<br />
R, U, M, w, O, A, A, A<br />
• Ersetzen der As, die durch Auffüllen entstanden<br />
sind, durch „=“<br />
• Base64-Codierter String:<br />
„RUMwOA==“<br />
Seite 11
Base64 in der Praxis<br />
• unter Verwendung der Base64-Klasse von<br />
Julian Robichaux (http://www.nsftools.com/)<br />
• unter Verwendung der NotesMimeEntity-Klasse<br />
´doc … NotesDocument-Objekt<br />
´streamin … NotesStream-Objekt<br />
Dim body As NotesMimeEntity<br />
Set body = doc.CreateMIMEEntity<br />
Call body.SetContentFromBytes(streamin, "image/gif", _<br />
ENC_NONE)<br />
´ Call body.SetContentFromBytes(streamin, "image/jpeg",_<br />
´ ENC_NONE)<br />
body.EncodeContent(ENC_BASE64)<br />
Seite 12
• DXL ist Domino XML<br />
Was ist DXL?<br />
(XML … Extensible Markup Language)<br />
• Tag-Definitionen sind in der Domino DTD<br />
(Domino Document Type Definition) und ab<br />
Version 7.0 zusätzlich in einem XML Schema<br />
(Dateiendung: XSD) definiert<br />
• ermöglicht die Anzeige einer kompletten oder<br />
Teile einer Domino Anwendung (auch<br />
Gestaltungselemente)<br />
Seite 13
Beispiel<br />
Import einer <strong>Bild</strong>-Ressource<br />
• IMPORT: 1. <strong>Bild</strong>er nach Base64 codieren<br />
- unter Verwendung der Base64-Klasse von<br />
Julian Robichaux (http://www.nsftools.com/)<br />
- unter Verwendung der NotesMimeEntity-Klasse<br />
• IMPORT: 2. DXL-Datei erzeugen<br />
• IMPORT: 3. DXL-Import<br />
• IMPORT: 4. Import komplett<br />
Seite 14
Dateianhänge und eingebettete <strong>Bild</strong>er<br />
Übernahme in eine <strong>Bild</strong>-Ressource<br />
• DXL-Export und Auswertung der<br />
entsprechenden Tags<br />
• Daten liegen schon Base64 codiert vor<br />
• Namen der Dateianhänge müssen aus einer<br />
Liste der Displaynamen und Name ermittelt<br />
werden<br />
• eingebettete <strong>Bild</strong>er haben keine Namen<br />
Beispiele:<br />
- Dateianhang als <strong>Bild</strong>-Ressource übernehmen<br />
- eingebettetes <strong>Bild</strong> als <strong>Bild</strong>-Ressource übernehmen<br />
- alle <strong>Bild</strong>er in einem Verzeichnis importieren<br />
Seite 15
Prinzip für den Export<br />
Quelle: <strong>Bild</strong>-Ressource<br />
als DXL-Datei exportieren<br />
Seite 16
Prinzip für den Export (Fortsetzung)<br />
Tag / Base64 decodieren<br />
Quelle: <strong>Bild</strong>-Datei (gif, jpg)<br />
Seite 17
Base64 Decodierung Funktionsweise<br />
• Quelle: Base64 codierte Zeichenfolge<br />
• Zerlegen in 6 Bit Binärblöcke<br />
• Aufteilung in 8 Bit-Gruppen<br />
• Umwandlung in Dezimalzahlen<br />
• Ersetzen durch ASCII-Zeichen<br />
Seite 18
Base64 Decodierung Beispiel<br />
• Quelle: „QjY0“<br />
• Zerlegen in Base64- Zahlencode: 16, 35, 24, 52<br />
• Schreiben in 6 Bit Binärblöcke:<br />
010000.100011.011000.110100<br />
• Aufteilung in 8 Bit-Gruppen:<br />
01000010.00110110.00110100<br />
• Umwandlung in Dezimalzahlen: 66, 54, 52<br />
• Ersetzen durch ASCII-Zeichen: „B64“<br />
Seite 19
Analysieren eines DXL-Streams<br />
• aufbauen einer DOM-Baum-Struktur<br />
(NotesDOMParser)<br />
• Tag <br />
• Attribut name enthält Name der <strong>Bild</strong>-<br />
Ressource<br />
• Tag oder enthält Base64 codiert<br />
den Binärstream<br />
Mehr dazu in Track 1 - Session 4 „Import von XML-<br />
Daten in Notes“ von Jürgen Kunert.<br />
Seite 20
Beispiele für den Export<br />
- <strong>Bild</strong>datei erzeugen aus einem Dokument mit<br />
einem eingebetteten <strong>Bild</strong><br />
- alle <strong>Bild</strong>-<strong>Ressourcen</strong> exportieren<br />
Seite 21
Nützliche Tools<br />
Höhe und Breite eines <strong>Bild</strong>es ermitteln<br />
<strong>Bild</strong>-Typ aus einer Binärdatei ermitteln<br />
gif-Datei: beginnt binär mit „47 49 46“<br />
jpg-Datei: beginnt binär mit „FF D8 FF“ und<br />
endet mit „FF D9“<br />
Beispiel:<br />
- Höhe und Breite ermitteln<br />
- <strong>Bild</strong>typ ermitteln<br />
Seite 22
Rechteproblematik<br />
Für den DXLImport werden mind.<br />
Entwicklerrechte benötigt. Folgende<br />
Möglichkeiten gibt es diese Einschränkung zu<br />
umgehen.<br />
1. Ein Agent, bei dem die Eigenschaft<br />
„Ausführen im Namen von“ gesetzt wird.<br />
2. Mail-IN-Datenbank, in der ein ereignisgesteuerter<br />
Agent den Import übernimmt.<br />
3. Eigene Datenbank, auf die jeder Entwicklerrechte<br />
hat und ein Agent kopiert dann die<br />
<strong>Bild</strong>-<strong>Ressourcen</strong> in die produktive<br />
Datenbank.<br />
Seite 23
Quellen<br />
Der Codierungs-Standard Base64 (Arndt Brünner )<br />
www.arndt-bruenner.de/mathe/scripts/base64.htm<br />
Wikipedia<br />
de.wikipedia.org/wiki/Base64<br />
JavaScript zur Base64-(De)Codierung (Selfhtml)<br />
aktuell.de.selfhtml.org/artikel/javascript/utf8b64/base64.htm<br />
Seite 24
Quellen<br />
Domino-Designer-Hilfe (F1)<br />
Foren<br />
www.dominoforum.de<br />
www.atnotes.de<br />
Domino-Super-Search (Martin Scott)<br />
www.martinscott.com/dominosupersearch2.nsf/Search<br />
Seite 25
Vielen Dank für Ihre Aufmerksamkeit.<br />
Jetzt sind Sie an der Reihe.<br />
Seite 26