[Gambas-user] pb loading an picture into a string
Charlie Reinl
Karl.Reinl at ...9...
Thu Nov 26 17:42:35 CET 2009
Am Donnerstag, den 26.11.2009, 14:32 +0100 schrieb Jean-Yves F. Barbier:
> Doriano Blengino a écrit :
> ...
>
> Of that I'm aware Doriano, THE PB is I need each and every byte of the picture
> in order to cast it to a Base64 to send it to postgresql.
> Or just escape some chars, or whatever processing function I'll further need;
> because I know there are base64 functions in gb.xml (however totally undocumented)
> but what if I need to apply another process to a picture??...
>
> So it looks impossible, as each time I take a byte out from the string it is
> supposed to be an UTF8 one (so only 234 bytes are processed out of 298) AND
> I can't convert this string because Conv (& Conv$) fail as Bad string conversion...
>
> Now, if you have any clue, I'd be glad to ear about it.
>
> JY
Salut,
these three functions handle, the base64 function in gb.xml .
A picture is stored/extracted in/from an XML-file. I'v never compared
input / output, but the output-picture looked like the input.
I just copied out of the project, you have to strip it down yourself
to make it work.
The first ToXML calls somewhere the second ToXML for writing.
The *.xlst have nothing to do with the base64 stuff.
SUB ToXML(args AS String[]) '<--- calls 2nd ToXML
DIM xml AS NEW XmlWriter
DIM item AS Object
'xml.Open(args[0] & ".xml",TRUE,"utf-8")
xml.Open(modPath.FullPath(args[0]), TRUE, "utf-8")
xml.StartElement("P")
ToolBox.ToXML(xml, "*")
FOR EACH item IN ide.GeneralParams
item.ToXML(xml)
NEXT
Layout.ToXML(xml)
xml.EndElement() ' ("P")
xml.EndDocument()
$fname = modPath.RelativePath(args[0])
'ide.Push("LAYOUT.MODIFIED.CLEAR")
layout.Modified = 0
IF $QuitOnSave THEN ide.Push("REPORT.QUIT")
END
PUBLIC FUNCTION ToXML(xml AS XmlWriter) AS Object '<--- is calls by 1st
ToXML
DIM p AS Variant
DIM s AS String
DIM props AS Collection
props = ME.GetAll()
xml.StartElement("I")
FOR EACH p IN props
xml.Attribute(props.Key, p)
NEXT
'add image as base64
xml.Base64(file.Load(ME.ide.Logic.GetFile(ME.Get("Path"))))
xml.EndElement()
RETURN xml
END
'Translate XML to CMD's
SUB FromXML(args AS String[])
DIM Xml AS NEW XmlDocument
DIM Xsl AS NEW XmlDocument
DIM out AS XmlDocument
DIM Xr AS NEW XmlReader
DIM sString AS String
DIM sPath AS String
DIM htmlOut AS File
DIM sTmpFile AS String
IF Exist(modPath.FullPath(args[0])) THEN
Xml.FromString(modPath.FullPath(File.Load(args[0])))
IF Exist(application.Path &/ "xml/xml2file.xslt") THEN
Xsl.FromString(File.Load(application.Path &/ "xml/xml2file.xslt"))
out = XSLT.Transform(Xml, Xsl)
sTmpFile = Temp$()
out.Write(sTmpFile)
Xr.FromString(File.Load(sTmpFile))
WHILE NOT Xr.Eof
SELECT CASE Xr.Node.Type
CASE XmlReaderNodeType.Element
FOR EACH Xr.Node.Attributes
sPath = Xr.Node.Value
NEXT
CASE XmlReaderNodeType.Text
IF NOT $TempFile.Exist(sPath) THEN
$TempFile[sPath] = Temp()
file.Save($TempFile[sPath], Xr.Decode(Xr.Node.Value,
"base64"))
'PRINT "Temp: ";TempFile[sPath]
END IF
END SELECT
Xr.Read()
WEND
IF Exist(application.Path &/ "xml/xml2macro.xslt") THEN
Xsl.FromString(File.Load(application.Path &/
"xml/xml2macro.xslt"))
out = XSLT.Transform(Xml, Xsl)
sTmpFile = Temp$()
out.Write(sTmpFile)
sString = File.Load(sTmpFile)
'somes ent's not replaced, then replace them
'sString = Replace(sString,"
","!")
sString = Replace(sString, "<", "<")
sString = Replace(sString, ">", ">")
sString = Replace(sString, "&", "&")
ide.Push(sString)
ide.Push("TOOLBOX.PARAMSET.INIT")
ide.Push("LAYOUT.SELECTION.REFRESH")
$fname = args[0]
ide.Push("LAYOUT.MODIFIED.CLEAR")
ELSE
message.Warning("can't find " & application.Path &/
"xml/xml2macro.xslt")
END IF
ELSE
message.Warning("can't find " & application.Path &/
"xml/xml2file.xslt")
END IF
ELSE
message.Warning("can't find " & args[0])
END IF
END
--
Amicalement
Charlie
More information about the User
mailing list