Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: prong am 14.01.05 - 20:05:06

Titel: Bild aus DXL auslesen (Base64)
Beitrag von: prong am 14.01.05 - 20:05:06
Hallo zusammen,

kann mir vielleicht jemand einen CODE-Tip (am besten in Java) geben, der er es mit erlaubt aus folgenden Tag das Bild so auszulesen und zu konvertieren, dass ich es wieder in Notes verwenden kann.

Der Tag:

<par><picture height='590px' width='677px'><notesbitmap>
lQAmAAAAAAAAAAAAAAABAAAAAAAAAKUCTgIIAAEACAAoAIAAQAC
.....
lQAmAAAAAAAAAAAAAAABAAAAAAAAAKUCTgIIAAEACAAoAIAAQAC
</notesbitmap></picture></par>

Prinzipiell kenne ich die vorgehensweise, schaffe es aber nicht dass ganze in funktionierenden Code umzusetzen.

Wäre super dankbar

Gruß

Marco
Titel: Re: Bild aus DXL auslesen (Base64)
Beitrag von: -Michael- am 14.01.05 - 20:15:03
Hi prong,

ich kenne leider Java zuwenig, aber AFAIK sind dort für diesen Zweck dieselben oder ähnliche Klassen unter ND6 zur Verfügung wie in LS. Ich schreibe daher mal von LS.

Ich bin kein DXL-Experte, kann Dir also nur ansatzweise Tipps geben.

Soweit ich weiß, hast Du 2 Möglichkeiten:
a) Parsing mit DOM
b) Parsing mit SAX

(a) ist afaik einfacher umzusetzen aber wohl hier performanceseitig nicht zu empfehlen, da das komplette DXL im Speicher landet und durchgeackert werden muss.
(b) ist etwas komplexer aber um Meilen performanter als DOM.

Schau Dir das mal in der ND6 - Designerhilfe an: unter "Contents" gibt es einen Hauptbereich "XML for Domino".

Kann gut sein, dass dies in Java noch einfacher geht (ich bin mir fast sicher).

Michael
Titel: Re: Bild aus DXL auslesen (Base64)
Beitrag von: -Michael- am 14.01.05 - 20:24:21
Noch was:

Die NotesDXLExporter - Klasse hat ab (ich glaube) 6.5.2 die Property ConvertNotesBitmapsToGIF. Jedenfalls gabs da mal einen Request am Anfang zu ND6-Zeiten, der dann umgesetzt wurde.

Denn das was Du da vorliegen hast ist wohl ein Bild, das über das Clipboard in ein RTF eingefügt wurde.

Also musst Du wohl ggf. schon beim Erstellen des DXL in den NotesStream entsprechend Hand anlegen.

Michael
Titel: Re: Bild aus DXL auslesen (Base64)
Beitrag von: Marinero Atlántico am 14.01.05 - 20:32:00
für das xml parsing mit java empfehle ich JDom. Ich finde das am einfachsten und gleichzeitig straight forward.
Sowohl Dom als auch Sax haben meiner Ansicht nach ziemlich üble Fallstricke:
Jdom gibts hier: http://www.jdom.org/


Für das Base64 dekodieren kannst du das nehmen:
http://prdownloads.sourceforge.net/iharder/Base64-2.1.zip?use_mirror=ovh

Wenn du während des codens auf Probleme stösst, kannst du ja nochmal posten.
Weisst du überhaupt, welches Dateiformat dieses base64-Zeugs im Notes-Bitmap Element hat?

So könntest du das Bitmap erstmal in ein File auf Platte legen und das dann wieder in Notes reimportieren.

So ungefähr:
Step1: extractBase64TokenFromXml
Step2: convertBase64TokenToFile
step3: importFileToNotes

Nochne Frage: Läuft das Javaprogramm aus Notes heraus oder innerhalb von Notes.
Wenn innerhalb von Notes kannst du vermutlich kein JDom verwenden, weil die Schlawiner bis zu Release7 keinen JAXP kompatiblen xml-parser haben.

Gruß Axel
Titel: Re: Bild aus DXL auslesen (Base64)
Beitrag von: prong am 14.01.05 - 20:34:22
Danke Michael,

das ganze mit dem DXL und parsen ist mir klat, aber was genau soll ich mit dem Zeug (was oben im Tag steht) machen.
Auf deutsch: Wie bekomme ich aus dem Kauderwelsch wieder ein Bild ???
Titel: Re: Bild aus DXL auslesen (Base64)
Beitrag von: prong am 14.01.05 - 20:37:03
Ist ne Notes Agent der erst das XML in den Speicher schreibt und dann nur das Bild rausholen soll. Der Rest der XML Daten ist nur ein Nebenprodukt.

Wie bereits gesagt, an den XML-Node komme ich ohne Problem.
Nur das konvertieren schaffe ich gar nicht  ???
Titel: Re: Bild aus DXL auslesen (Base64)
Beitrag von: -Michael- am 14.01.05 - 20:38:25
Hi Axel,

Weisst du überhaupt, welches Dateiformat dieses base64-Zeugs im Notes-Bitmap Element hat?

ich glaube das war das Hauptproblem damals beim Request für den DXLExporter, nämlich dass dieses NotesBitmap nicht vernünftig umgewandelt werden konnte. Deswegen wurde wohl die Property ConvertNotesBitmapsToGIF eingeführt.
Ist aber meines Erachtens auch nicht toll. Gif heißt ja, dass nur max. 256 Farben möglich sind. Was ist also, wenn es sich da um ein Foto handelt? Notes wandelt das dann wohl radikal runter auf 256 Farben. Ich kenne jetzt auch nicht den Algorithmus den da N/D für diese gif-Umwandlung verwendet, aber befürchte stark, dass dies selbst bei Bildern die vormals vielleicht 400 Farben haben nicht optimal wird. Zumal entsprechende Optionen fehlen.

Michael
Titel: Re: Bild aus DXL auslesen (Base64)
Beitrag von: prong am 14.01.05 - 20:45:08
Farbe ist bei meinem Problem egal. Wird eh nachher nur in sw gebraucht...

Ich verzweifle langsam  ;)
Titel: Re: Bild aus DXL auslesen (Base64)
Beitrag von: Marinero Atlántico am 14.01.05 - 20:46:54
Moment. Was heisst eigentlich NotesBitmap?
Ein Gif oder Jpeg, dass ich in Notes importiere bleibt doch ein gif oder jpeg.
Das wird doch über OLE-Magie irgendwie da reinverlinkt.

Oder rede ich mich jetzt um Kopf und Kragen  ??? ;D

Gruß Axel
Titel: Re: Bild aus DXL auslesen (Base64)
Beitrag von: -Michael- am 14.01.05 - 20:54:56
Oder rede ich mich jetzt um Kopf und Kragen  ??? ;D

Gute Frage. Ich rede mich wohl auch grad um Kopf und Kragen mit meinem Halbwissen  ;D  :P

Ach ja, hier der SPR:
NotesDXLExporter.ConvertNotesbitmapsToGIF (http://www-1.ibm.com/support/docview.wss?rs=0&q1=DANO5HUPRU&uid=sim403cec99695fd5b8985256d55004da4f7&loc=en_US&cs=utf-8&cc=us&lang=en)

@prong: dieses gif jetzt in eine *.gif - Datei umzuwandeln, dafür muss man wohl dann mit Base64 hantieren, und das war wohl die eigentliche Frage  ;D
Mit Java ist das glaub ich einfach, aber da müssen andere Experten ran. Axel vielleicht??
Mich würde interessieren, wie man dies unter LS machen würde  ;)

Michael
Titel: Re: Bild aus DXL auslesen (Base64)
Beitrag von: prong am 14.01.05 - 21:00:27
Da ich jetzt schon ne ganze Weile nach einer Möglichkeit suche, aber keine genaue Lösung finde,wäre das vielleicht mal was für die Best Practices Rubrik, oder??
Titel: Re: Bild aus DXL auslesen (Base64)
Beitrag von: -Michael- am 14.01.05 - 21:02:34
Ein Gif oder Jpeg, dass ich in Notes importiere bleibt doch ein gif oder jpeg.

Ähm, hab vorhin erst halb gelesen, sorry.

AFAIK wird ein Bild, das man über die Zwischenablage irgendwo kopiert und in ein Richtextfeld einfügt, in dieses proprietäre NotesBitmap - Format umgewandelt. Darauf programmatisch zuzugreifen wohl ein Ding der Unmöglichkeit, daher eben dieser SPR mit der neuen Property.
Ein via Import eingefügtes Bild ist einfach (z.B. via DXL) zu greifen, dies behält das Format.

Michael
Titel: Re: Bild aus DXL auslesen (Base64)
Beitrag von: Marinero Atlántico am 14.01.05 - 21:09:45
... und wenn man es nicht über die Zwischenablage sondern als Objekt einbindet ???
... oder wenn man über ERstellen/Bild geht?

Wird das dann auch in ein spezielles Notesformat umgewandelt?

Gruß Axel
Titel: Re: Bild aus DXL auslesen (Base64)
Beitrag von: Marinero Atlántico am 14.01.05 - 21:10:56
Da ich jetzt schon ne ganze Weile nach einer Möglichkeit suche, aber keine genaue Lösung finde,wäre das vielleicht mal was für die Best Practices Rubrik, oder??

Du hast ja schon angefangen  ;D
Wenn du fertig bist, kannst du es dann unter den Best Practices veröffentlichen  8)
(nicht böse, zynisch oder ironisch gemeint)
Titel: Re: Bild aus DXL auslesen (Base64)
Beitrag von: -Michael- am 14.01.05 - 21:13:30
... und wenn man es nicht über die Zwischenablage sondern als Objekt einbindet ???
... oder wenn man über ERstellen/Bild geht?

a) gute Frage. Müsste man testen (das Ergebnis schnell mal in XML/DXL exportieren um zu sehen was herauskommt)
b) ist identisch mit File/Import, sprich es wird dann als BMP/GIF/JPG etc. eingebunden und das Format wird beibehalten

Michael
Titel: Re: Bild aus DXL auslesen (Base64)
Beitrag von: prong am 14.01.05 - 21:18:57
Werde mein besten geben  ;D
Titel: Re: Bild aus DXL auslesen (Base64)
Beitrag von: -Michael- am 14.01.05 - 21:23:05
Da ich jetzt schon ne ganze Weile nach einer Möglichkeit suche, aber keine genaue Lösung finde,wäre das vielleicht mal was für die Best Practices Rubrik, oder??

Du hast ja schon angefangen  ;D
Wenn du fertig bist, kannst du es dann unter den Best Practices veröffentlichen  8)
(nicht böse, zynisch oder ironisch gemeint)

Ja, man müsste die Ergebnisse eigentlich in eine Klasse packen.  ;)

Dabei könnte man dann gleich eine "IsRichtextEmpty" Property einbauen, da die Standard Notes/Domino-Klassen ein sauberes Ergebnis hier nicht zulassen, XML aber wohl schon.

Michael
Titel: Re: Bild aus DXL auslesen (Base64)
Beitrag von: -Michael- am 14.01.05 - 21:37:50
... und wenn man es nicht über die Zwischenablage sondern als Objekt einbindet ???
... oder wenn man über ERstellen/Bild geht?

a) gute Frage. Müsste man testen (das Ergebnis schnell mal in XML/DXL exportieren um zu sehen was herauskommt)
b) ist identisch mit File/Import, sprich es wird dann als BMP/GIF/JPG etc. eingebunden und das Format wird beibehalten

Michael

(a) wird nach meinem Test auch als <notesbitmap> über DXL ausgegeben, wenn die Quelle z.B. ein gif ist.

Interessant wäre es noch zu wissen, wie 3rd Party - Produkte darauf zugreifen. Bzw. ob diese das überhaupt können.

Michael
Titel: Re: Bild aus DXL auslesen (Base64)
Beitrag von: animate am 14.01.05 - 23:10:17
na so schwer ist das doch nicht.
was du hast sind irgendwelche Zeichen, die keinen Sinn auf den ersten Blick haben, weil sie in Base64 kodiert sind. Die Zeichen musst du dekodieren, dann hast du wieder Zeichen, ide keinen Sinn (zumindest für mich) haben, weil sie fast genauso aussehen, wie die vorher. Wenn du die Zeichen allerdings in eine Datei schreibst und die Datei in einem Bildbetrachtungsprogramm anschaust, dann solltest du was schönes sehen.
Und ja, du solltest den Schalter ConvertNotesbitmapsToGIF setzen, sonst bekommst du nämlich Zeichen raus, die kein Programm außer Notes versteht.
Titel: Re: Bild aus DXL auslesen (Base64)
Beitrag von: -Michael- am 15.01.05 - 19:00:36
Hier hab ich eine Klasse verlinkt, um in LotusScript Base64 zu encodieren und decodieren:

Notes-Links.de: XML/DXL und Base64 in LotusScript (http://www.notes-links.de/cpo/dokus/index.php?PHPSESSID=cdb00b8b8c59ef834816fddd0bede394#695)

Michael
Titel: Re: Bild aus DXL auslesen (Base64)
Beitrag von: essi am 23.01.06 - 14:16:39
Hallo zusammen ,

hat jemand endlich  :P  eine Lösungvorschlag für diesen Beitrag ,weil
ich  auch das gleiche problem hab,nur mit eine kleine unterschied
,dass ich die Bilder nicht in lotus notes wiederhaben möchte sondern in eine Pdf-datei .
mein bisherige Program konvertiert die ganze dokumente in pdf nur die bilder und tabellen nicht  :'( .

wäre für euere Hilfe dankbar
Titel: Re: Bild aus DXL auslesen (Base64)
Beitrag von: flaite am 23.01.06 - 20:56:32
Thomas Völkl hat das eigentlich schon beschrieben:
1. base 64 enkodierte Daten aus Bild rausholen.
2. Daten base64 dekodieren.
3. Daten als Stream in ein File schreiben.
Versuch das doch einfach mal.

Gruß Axel
Titel: Re: Bild aus DXL auslesen (Base64)
Beitrag von: essi am 24.01.06 - 10:33:53
Hallo Alex,
danke für dein Hinwies .

ich hab in meinem dokument sowohl Texte auch Bilder und
wenn ich das in XML umwandle ,wie kann ich das Teil von
Bild heraus bekomme?

Gruss
Essi
Titel: Re: Bild aus DXL auslesen (Base64)
Beitrag von: flaite am 24.01.06 - 18:36:09
Du kannst doch auf die einzelnen Teile mit z.B. Dom Api zugreifen.
Mit xslt ist das eher schwierig. Mit Erweiterungen sicher möglich.
Da solltest du wohl besser mit Dom, JDom oder ähnlichem dran

Gibts demnächst auf Notes.net, wenn du das hier aufmerksam durchliest  ;D
http://www.domblog.de/domblog.nsf/d6plinks/HPKR-6LCN8F
http://www.wissel.net/__48256D620048177D.nsf/d6plinks/SHWL-6LCG9Y
Ich hoffe es ist nicht allzu dringend. Aber da wird klar gesagt, dass
a) sie das feature haben und
b) dass es auf notes.net gestellt wird,

oder  ???

1. Mit dom, jdom oder ähnlichem kannst du auf jedes xml (dxl) Element navigieren und den Inhalt herauslesen.
2. Du kannst das vielleicht mit dem oben angesprochenen ConvertNotesBitMapsToGif (wohl in DXLExporter kannst du bestimmen, dass du das später als gif extrahieren kannst.
3. Du schreibst das base64 enkodierte in einem Stream (oder gehst über die Mime-Klassen).
4. Den Stream dekodierst du und lenkst ihn in eine Datei.
So ungefähr stelle ich mir das vor.