Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Guardar jpg en archivo XML (https://www.clubdelphi.com/foros/showthread.php?t=22439)

zemog76 15-06-2005 17:09:06

Guardar jpg en archivo XML
 
Hola a todos, necesito almacenar una imágen jpg en un archivo xml.
Lo que estoy haciendo es leer en un string la información del archivo que contiene la imagen. Y luego lo asigno a un nodo del archivo xml, pero tengo el problema de que al asignar el string al Nodo, que es de Tipo OleVariant, se pierde parte de lo que asigno.
Por ejemplo, el string comieza con ÿoÿä'#0#$10'JDF.... y sigue, cuando asigno, el OleVariant queda con ÿoÿä, por lo tanto al grabar el xml, sólo guarda ÿoÿä.
Soy nuevo en XML, quizás este sea un problema que ya tiene solución pero no la encuentro.
Estoy probando con una pequeña aplicación de prueba, en la que creo un xml, creo un nodo (con los diferentes TNodeType), asigno el string "con la imagen" y no he podido hacer que guarde todo el string el xml.

Espero que me puedan dar una mano.

Desde ya muchas gracias.

Guillermo

jachguate 15-06-2005 17:15:01

Una posibilidad es que "codifiques" el contenido del jpeg que es binario, es decir, que tendrá caracteres imprimibles y no imprimibles a un formato que contenga solamente caracteres imprimibles.

Es lo mismo que se hace cuando envias un binario por correo, puesto que los protocolos solo permiten transmitir en el cuerpo de un mensaje bytes en cierto rango (creo que >=32) y lo demás son códigos de control, etc.

Para codificarlo podes valerte de las INDY, que en la pestaña Indy Misc tiene varios componentes para tal efecto (p. ej. el TidBase64Encoder).

Luego, al leer nuevamente el xml, el agente que lo haga ha de decodificar el contenido nuevamente (por ejemplo con el TidBase64Decoder).

Hasta luego.

;)

zemog76 15-06-2005 18:01:01

Muchas gracias por tu pronta respuesta. Voy a intentar lo que me indicas.

Te cuento que hice esta prueba: Asigné, en tiempo de diseño, a un TEdit el contenido de la imagen (la cadena de caracteres), luego asigné al OleVariant el contenido de Edit1.Text y asi sí el OleVariant mantiene todos los caracteres. Lo raro es que asigné, en tiempo de ejecución, los caracteres de la imagen a un TEdit y sólo almacenó ÿoÿä, es decir, sólo una parte, lo mismo pasó con un TMemo.

La verdad que no se que está pasando.

Muchas gracias nuevamente.

jachguate 15-06-2005 18:59:38

Aún cuando en delphi te sea posible guardar caracteres < 32 en un archivo xml, supongo que este no será válido para el 99.99% de otros sistemas que procesan xml, pues esperan archivos de texto y seguramente no estén preparados para manejar adecaudamente caracteres de control en el contenido.

Hasta luego.

;)

zemog76 15-06-2005 20:16:51

Muchas gracias. Les comenté a mis jefes acerca de lo que me dijiste y, aparentemente, la especificación de los requisitos no es la correcta.
Voy a esperar a ver que me dicen y te cuento.

Muchas gracias, nuevamente.

JXJ 15-06-2005 21:24:44

y ¿en que van a emplear eso de guardar una imagen jpg, en un archivo
XML. ?

que usos le van a dar, yo no le capto. bien. :S

mamcx 15-06-2005 22:19:26

Para futura referencia:

Lo que se hace es que se guarda en una etiqueta CDATA: (preferible porque queda aparte de los datos como tal)

http://www.w3schools.com/xml/xml_cdata.asp

Dentro de esta, se puede escribir contenido de forma libre. Ahora bien, igual TIENES que codificar y decodificar el contenido, convirtiendo el JPG a un stream y luego a un stream de texto, mediante un Base-64 encoding (Indy lo tiene?). No tengo el dato como se hace en Delphi Win32 (lo se en .NET http://www.dotnet247.com/247referenc...57/288330.aspx) pero por aqui es el camino...

Por otro lado, que tal en simplemente poner el link a la imagen, de formato URL?

mamcx 15-06-2005 22:20:36

Por otro lado:

"Algunas personas, cuando se enfrentan a un problema, piensan 'Ya se!, usare XML.' Ahora ellos tienen 2 problemas."

;)

-JWZ

jachguate 15-06-2005 22:39:58

Cita:

Empezado por mamcx
TIENES que codificar y decodificar el contenido, convirtiendo el JPG a un stream y luego a un stream de texto, mediante un Base-64 encoding (Indy lo tiene?).

Es lo que sospechaba... y si, con las INDY se puede hacer, tal como lo dije en un mensaje anterior.

Hasta luego.

;)

zemog76 21-06-2005 15:05:08

Hola a todos, efectivamente, la especificación era incorrecta.

Después de investigar por nuestra cuenta, unos de mis jefes se dio cuenta, por un ejemplo que tenemos, que se estaba codificando usando una codificación similar a la que hace le método HttpEncode. La diferencia está en que para algunos caracteres no se hace la codificación
Asi que lo que hicimos fue implementar nuestro HttpEncode y ahora se puede almacenar la imagen en el XML.

Con respecto a una pregunta anterior, la verdad no tengo idea de por que se necesita la imagen dentro del XML, yo, en la empresa, sólo soy un simple programador y hago lo que "especifican".

Muchas gracias a todos.

JXJ 21-06-2005 19:04:00

YO creo que si seria util conocer para que proposito, es eso de poner
una imagen jp, o cualquier imagen en un xml.

A lo mejor, y el metodo, no es el menos engoroso, y más útil, y conociendo
para que se puede probar si hay otras formas más optimas.

oye de favor zemog76 , preguntas, que estoy intrigado.
Gracias

jachguate 21-06-2005 20:43:14

Cita:

Empezado por JXJ
YO creo que si seria util conocer para que proposito, es eso de poner
una imagen jp, o cualquier imagen en un xml.

Pues eso, ya es cosa de gustos. Para poner un ejemplo de uso, supongamos que tenes un dtd de intercambio de información de productos entre un supermercado y sus proveedores, probablemente para alimentar automáticamente el catálogo de la página web y del sistema de facturación. Podes abrir la puerta para que por ese archivo de intercambio de específicaciones pueda viajar también la o las imágenes del producto, no?

Hasta luego.

;)

zemog76 25-06-2005 00:29:54

Hola, se necesita la imagen en el xml porque este xml se le envía a otra institución, y ésta es la que realizó la especificación, y se ve que les resulta util esta manera, imagino que es porque quieren tener toda la información en un solo archivo.

JXJ 27-06-2005 02:16:47

Vale graciaas. ahora a pensar, en que lo puedo usar , yo. ?;:S:S


La franja horaria es GMT +2. Ahora son las 15:54:08.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi