Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Hartigan en 4 Agosto 2010, 12:58 pm



Título: Guardar imagen en binario en un archivo (C#)
Publicado por: Hartigan en 4 Agosto 2010, 12:58 pm
Hola, tengo un nuevo problema, tengo una imagen la cual obtengo directamente de la base de datos... Una vez obtenida quiero almcenar su valor binario en un archivo (para lo del vcard), como puedo hacerlo???

gracias de antemano.


Título: Re: Guardar imagen en binario en un archivo (C#)
Publicado por: [D4N93R] en 4 Agosto 2010, 15:38 pm
Mira este post, no es viejo, y se aclaran muchas dudas:
http://foro.elhacker.net/net/guardar_imagen_en_base_de_datos_c-t296587.0.html (http://foro.elhacker.net/net/guardar_imagen_en_base_de_datos_c-t296587.0.html)


Título: Re: Guardar imagen en binario en un archivo (C#)
Publicado por: Hartigan en 4 Agosto 2010, 16:00 pm
jaja, sí, lo estuve mirando, pero a ver, yo cuando recogo la imagen en la base de datos se supone que ya está en binario. pero luego al añadirlo al archivo como lo hago?? yo hago lo siguiente: (para crear un vcard file)

sw.WriteLine("PHOTO;ENCODING=b;TYPE=JPEG:" + photo);

y claro una vez que tngo el archivo .vcf, no funciona. El contenido del archivo al abrirlo con el bloc de notas es este:

Código:
....
....
PHOTO;ENCODING=b;TYPE=JPEG:System.Byte[]
TEL;WORK;VOICE:123456789
TEL;HOME;VOICE:980512833
TEL;CELL;VOICE:660778300
TEL;WORK;FAX:
.....
...

Es decir no me está representando los bits...

A ver si me podeis ayudar..

gracias. 



Título: Re: Guardar imagen en binario en un archivo (C#)
Publicado por: raul338 en 5 Agosto 2010, 00:21 am
intenta usar sw.Write(photo, 0, photo.length);

Dudo que funcione :xD, en todo caso, escribe byte x byte directamente :D


Título: Re: Guardar imagen en binario en un archivo (C#)
Publicado por: [D4N93R] en 5 Agosto 2010, 01:17 am
Qué tipo es esa variable "photo"?


Título: Re: Guardar imagen en binario en un archivo (C#)
Publicado por: Hartigan en 5 Agosto 2010, 02:18 am
Qué tipo es esa variable "photo"?

Es una variable de tipo byte, normal para leer la imagen de la base de datos como haciamos en el otro enlace que me has pasado. xDD


Título: Re: Guardar imagen en binario en un archivo (C#)
Publicado por: [D4N93R] en 5 Agosto 2010, 02:46 am
Ah, claro ya lo veo, es que no lo vas a poder hacer así xD Tienes que convertir el byte[] en string..

Código
  1. sw.WriteLine("PHOTO;ENCODING=b;TYPE=JPEG:" + System.Text.ASCIIEncoding.ASCII.GetString(photo));

Porque al meterlo ahí, y concatenarlo, automáticamente se le hace .ToString, y ese ToString es de object, por lo que te sale es el nombre de la clase.

Saludos!


Título: Re: Guardar imagen en binario en un archivo (C#)
Publicado por: Hartigan en 5 Agosto 2010, 14:09 pm
mmm, no me funciona, en el txt veo que genera muchas interrogaciones en lugar de caracteres y me sigue sin cargar la imágen....

Código:

...
PHOTO;ENCODING=b;TYPE=JPEG:???? JFIF  ` `  ?? ?Exif  MM *           J       R(       1       Z?i       j       `      `   Paint.NET v3.36  ??    t   |    C R E A T O R :   g d - j p e g   v 1 . 0   ( u s i n g   I J G   J P E G   v 6 2 ) ,   q u a l i t y   =   9 0
     ?? C 
  
 



?? C  
??  Z Z" ??           
?? ?   } !1AQa"q2???#B??R??$3br?
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz???????????????????????????????????????????????????????????????????????????        
?? ?  w !1AQaq"2?B???? #3R?br?
$4?%?&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz??????????????????????????????????????????????????????????????????????????   ? ?w??
???Q[[<?8TA?k??G?|w?K???ea?2Ha? ????|G(?1?7^?R?ap?w$`W??O????.?r?I?<?9??F1?d?U????Kuu=?[?????88????[l?;)+D?s?????wL?xQ????????mi,,x??^i??U???????+@?C???z? ?????<7?}?G?[g?8?52??kS??&??7L????c??e??? ?K???dc??$??H???t????K??c?K2(c?_8?i?????N????&?gyP>^8?9? 85????z??;?e?-?/?}??? ??5?C?3_O~?????m?\?)???????rG?=??>j???}????u??_???????????F????G?k?*??>? ?u? c? ?????r2)?? ?H??73?p??????&?4?d??????>??????Z???????????mI?C??\? ???_?7?+??_%6??0???0??.+c?|S|????????????O?3????)?????????Dq-?c?c??????u???R?eo???I I!lyj????(???z?5ss%??O??
?????_?EY[#???@??A??:??{??@yO??2"??~??g?A ??|w?gw??]>????4????y?z??<??? ??????5???zg????M???f?|3??X??x???!u?<1R;H'+?s?g???uv??j*V??g???~x)f????[k5??`>?A??n????WR????r??V???!t?[t ??q??\???bj7&???i?MZ??fE ??
/ j8U?W9??}????8?NU??dG??W3G?%???t??"r?<??x'??WI???W???4???sdJ?<S??,>????wrF??d??h??!????}kgP???E?jF@???O? ?J??+?V??~????-KN?K`y?g?????tBC??????]?|???? e???+??c??m"??G? ?L???m?7x.[8????w@??T??????9g??%?k1???=?}x????mB??z???[w_"?s l?2????y=??RC?[=[??Q??nc??V?5y?P={Q?????'?????@.'M????(???#?q????J??6i-?0????-??n???H???k?????UH??>g_???_3?U??B? W???d?3??4 1??&?Ms3???w?A?9?t????J???7??GE??Xm?8????j3?5??O?T???&????X??s??????:?? ?oP
t???x<G)??4_tn??????=??:W??5??????N"K??1?j?'@?E?N??K??CU?? 4???Q???p[???=j5????
??? ?G?{;?m?$?]??9??p???RI$?*? ???_???$?'???~????r???5??,
?x?@'yf?I???=?91N?EY?^h?+[YN?'x ?b?????o?W?y???h????????????T??w#?Mq???V?H&)?????}??H?Gr?;???A????K??
sJ???j??????#??:b?`r7??????i???l4??9oc?3?+?KbbR??(?P??J?=r?P???????{k??)? ??7?????[??=?N???V???? ?I]?u??)???????p???}w??.?oy???Xgu??X!F?"?6'??O??x??k??2?%???H??? ?#????'???????~?^2?E`'? ???????D{?\U&??F?RuK_???????????yt;?;3??n8<?_RXw???:4Z???o?$0??L1?J???9???!?\&?? f?t?????A4G?RX?0a? ?}k?????>,?.?P?u!?(uK???a?0?????>h?????OS?????K?N???(?7?D?? v??b?o?e????=?Vql????????~"???? -???#???
? ?????? )N ?E:???Y??Ox????[?e?|? ?
?O?????Mp".-?????H?b3?????|4??r?[?1???:??q??UE%?.NR?>??@???Gyv _2x????S???)u/????u???+=.?3???<???Vc??==?cY??9?????????y?m?`gc? 7????????W??l??^??::?i?????3 H,????N???1???Q?_x?k???yl???jg 0#??W?<q?;??,?1?K??%?iqj??C6?<?#?l{???h??(???1???I?7??RE?GV???y???EO0X? ?Q????f{????<G?6?B????? ??y'?x?H?K????PGi??WV??|.-??7~??P`????/??3??~$?????f?._Obp??R???{??w???????l???g??????+?r?Q????=9ROPMq??*;(8?K?0x?????Il???+e ??Wv?|?8 ?%?rI?,?}??g???koi???????n!'?C?rb???g?j?,?d?$???_A???k/??rz?????|???/???P,{?w?$c????hJ??VeN3J?Y???+- ?w??>??????.-?????? G ?????C_?x?x?R???) ??????W?W?Im???"=KN/??zy??????????zv???|S????$_?6????YH?A9???c]rwW<N??f?D?e?1????O0i?? ??J??????s_p????? d}
.|x?[??5??
????? _?@=?=?!?????~6???'???r??z?*?
??S??6{?^}??8t;?2<y1???? ?(????b?=???=o??X???rX???%?rz?
LIm!??????_?Y}???!???'?rb%t?r???[??[?? ??O??j??r??"? ?? u?????5???4K? -Qm??M????????:?? =???|Ssksk{5??2??l=85?sG???P??v}?:??w?H?f?v?????????_?]??????? X}??"]c@W "?6?u??P{09? ?|?Dv????????N??.+?-_G?`u
?=???e~B?8? d??L Sn?u'??7?(?????n??J?i???J?6<?+4x?9? ?@5????[?!???]??u`f? ??9???^y??????v??;???Ny.S#=?^???Ti?B?????HX?$?}I5?H?5(?R?????M????p???/ _I???F??????T?`????????????b~?r3??????GR=??XX???p????W?~??"mc??:Do??D??N?F0]???X??\?W????(a????i?=??7k??l???????Ga???Z???&?m-"?e.???$?lg ????O????ew[???Y?(9???y?8??y??&?? R ???<????=E???:??n???????N???d1??? ?6??Jn?TQo?_??&i???bI.?;x#Rr6??^?'?x???????y?V??Fy?6?P?N[i???q^k?/Y?$???????<?????f?????9-+3I$?{?e8?lpT??????
TEL;WORK;VOICE:123456789
TEL;HOME;VOICE:980512833
TEL;CELL;VOICE:660778300

....



Título: Re: Guardar imagen en binario en un archivo (C#)
Publicado por: raul338 en 5 Agosto 2010, 15:38 pm
Ah, claro ya lo veo, es que no lo vas a poder hacer así xD Tienes que convertir el byte[] en string..

Código
  1. sw.WriteLine("PHOTO;ENCODING=b;TYPE=JPEG:" + System.Text.ASCIIEncoding.ASCII.GetString(photo));

Porque al meterlo ahí, y concatenarlo, automáticamente se le hace .ToString, y ese ToString es de object, por lo que te sale es el nombre de la clase.

Saludos!

MMm... que codificacion estas grabando el archivo? Yo intentaria con ANSI o UTF-8

Código
  1. sw.WriteLine("PHOTO;ENCODING=b;TYPE=JPEG:" + System.Text.Encoding.UTF-8.GetString(photo, 0, photo.Length));
(PD: Nunca me funciono el GetString por si solo :¬¬ siempre tuve que poner inicio y final :P)


Título: Re: Guardar imagen en binario en un archivo (C#)
Publicado por: [D4N93R] en 5 Agosto 2010, 16:11 pm
Si exacto, eso era solo un ejemplo, prueba con otras codificaciones..

Saludos!


Título: Re: Guardar imagen en binario en un archivo (C#)
Publicado por: Hartigan en 5 Agosto 2010, 17:01 pm
Yuhu!!!. ya lo he conseguido chicos. Dejo la solución por si a alguien le sirve:


Simplemente hay que tener la imagen en formato binario y luego añadir esta linea al vcf:

Código
  1. sw.WriteLine("PHOTO;ENCODING=b;TYPE=JPEG:" + System.Convert.ToBase64String(img, 0, img.Length));

La única pega es que el visor de contactos de windows no me lo lee, pero outlook sí. Si lo arreglo para que me la lea tb desde windows, pues lo pondré.

saludos y muchas gracias por la ayuda sois los mejores ;)


Título: Re: Guardar imagen en binario en un archivo (C#)
Publicado por: [D4N93R] en 5 Agosto 2010, 17:30 pm
Prueba poniendo una imagen más pequeña..


Título: Re: Guardar imagen en binario en un archivo (C#)
Publicado por: Hartigan en 5 Agosto 2010, 17:45 pm
Prueba poniendo una imagen más pequeña..

la imágen de por si es muy pequeña ya, debería leerla sin problemas... es una imagen de avatar de foro la que pruebo asíque...

PD: jajaja veo que ahora eres moderador. xD me alegro ;)


Título: Re: Guardar imagen en binario en un archivo (C#)
Publicado por: [D4N93R] en 5 Agosto 2010, 19:13 pm
Habría que investigar bien eso, tienes algún enlace en donde tengas la estructura de un vcard?

Sí :) Gracias x)


Título: Re: Guardar imagen en binario en un archivo (C#)
Publicado por: Hartigan en 5 Agosto 2010, 19:37 pm
Yo lo he mirado de aquí:

http://tools.ietf.org/html/rfc2426#section-3.1.1

y de aquí: http://en.wikipedia.org/wiki/VCard

A ver si te sirve...


Título: Re: Guardar imagen en binario en un archivo (C#)
Publicado por: [D4N93R] en 5 Agosto 2010, 20:16 pm
Citar
X-MS-CARDPICTURE   property   string   Works as PHOTO or LOGO. Contains an image of the Card in Outlook.

Creo que solo sale en Outlook.. Aunque no estoy muy seguro-


Título: Re: Guardar imagen en binario en un archivo (C#)
Publicado por: Hartigan en 6 Agosto 2010, 11:39 am
Citar
X-MS-CARDPICTURE   property   string   Works as PHOTO or LOGO. Contains an image of the Card in Outlook.

Creo que solo sale en Outlook.. Aunque no estoy muy seguro-

Pero eso será si usas la opción de propietario, usando la libre no debería...


Título: Re: Guardar imagen en binario en un archivo (C#)
Publicado por: [D4N93R] en 6 Agosto 2010, 19:23 pm
Pues ni idea, leete bien la especificación.. :)


Título: Re: Guardar imagen en binario en un archivo (C#)
Publicado por: Hartigan en 7 Agosto 2010, 01:49 am
Pues ni idea, leete bien la especificación.. :)

sí, es lo que he estado haciendo pero... a mi me parece que lo estoy haciendo bien... no se si esque MS usa algun tipo privado para los contactos aunque no debería porque además el propio outlook es de MS... no se, intentaré a ver si averiguo algo...

Lo mismo me pasa con las fecha del aniversario o el cónyuje, no hay manera que me lo reconozca...

Salu2.