28.10.2013 Aufrufe

PowerPoint - T1S2-Bild-Ressourcen - EntwicklerCamp

PowerPoint - T1S2-Bild-Ressourcen - EntwicklerCamp

PowerPoint - T1S2-Bild-Ressourcen - EntwicklerCamp

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!