Convertir una imagen en una cadena codificada en base64

390 views
Skip to first unread message

adem adem

unread,
Oct 13, 2023, 8:52:49 PM10/13/23
to publice...@googlegroups.com
Hola gente;
Tengo este ejemplo que  convierte una imagen codificada en base64 a su estado original:
 
local m.mypic
text to m.mypic noshow        
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
endtext
strtofile(strconv(m.mypic,14), "fonds.jpg")
thisform.picture="fonds.jpg"


Lo que necesito es el paso al que se realizó anteriormente para llegar este de cadena , es decir la conversión de la imagen a cadena en base64, lo intente de varias maneras pero no me aclaro.  
Pregunto si alguno de ustedes tiene un ejemplo de conversión de imagenes a cadena y viceversa
o indicarme como lo hago con este mismo ejemplo.
Agradezco cualquier ayuda o sugerencia.
Un saludo.
 

Trento

unread,
Oct 13, 2023, 10:23:19 PM10/13/23
to Comunidad de Visual Foxpro en Español
Prueba con esto:

lcImg = FILETOSTR("miImagen.jpg")
lcImg2 =  STRCONV(lcImg, 13)
STRTOFILE( STRCONV( lcImg2, 14 ), "miImgCopia.jpg")

Saludos.

Victor Espina

unread,
Oct 14, 2023, 8:30:55 AM10/14/23
to Comunidad de Visual Foxpro en Español

Zarlu

unread,
Oct 14, 2023, 10:14:12 AM10/14/23
to Comunidad de Visual Foxpro en Español
Buenos días 76xademx76 !

Entiendo que lo que requieres es obtener la cadena para insertarla al TEXT..ENDTEXT
Entonces debes enviar el contenido de FileToStr al portapapeles (_ClipText)

Teoricamente esto debe funcionar:

_ClipText =STRCONV(FILETOSTR(GETFILE()),13)

Y entonces pegas lo obtenido al  TEXT..ENDTEXT

Suerte
zarlu
Chetumal, Quintana Roo, México

adem adem

unread,
Oct 15, 2023, 10:18:20 AM10/15/23
to publice...@googlegroups.com
"Hola gente, gracias a todos. Trento, gracias. Victor, gracias. Zarlu, gracias por responder. 
Todas las sugerencias son efectivas y dan resultados. Aunque lo que necesito es justo lo que mencionó Zarlu: el texto de la cadena. 
Esto es para evitar crear una carpeta adicional de imágenes en mi aplicación. 
Dicho esto, logré obtener la cadena utilizando _cliptext. Sin embargo, noté que solo se pueden cargar imágenes de tamaño de hasta 5 KB. 
Al probar con imágenes de más de 14 KB, ocurre un error y se cierra todo el VFP (adjunto la imagen del error).
 Nota: no he probado con imágenes de más de 6 KB. 

Nueva imagen de mapa de bits (3).bmp
Por curiosidad, ¿alguien sabe por qué? De nuevo, gracias. Un saludo."

--
Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/960250dc-70fc-4804-83a1-9da89730131dn%40googlegroups.com.

jorgeg...@gmail.com

unread,
Oct 15, 2023, 10:34:08 AM10/15/23
to Comunidad de Visual Foxpro en Español
Eso es una limitante en los eventos de un objeto, si quieres poner con imagenes mas grandes de 5Kb debes de poner en un prg

adem adem

unread,
Oct 15, 2023, 10:44:22 AM10/15/23
to publice...@googlegroups.com
Gracias Jorge, 
Gracias por la explicación. 
Un saludo.

Zarlu

unread,
Oct 16, 2023, 10:25:08 AM10/16/23
to Comunidad de Visual Foxpro en Español
Buenos días foxeros!

Aprovechando el hilo....

Algunas veces cuando he querido obtener la cadena para pegarla al TEXT...ENDTEXT, tal cual le sugerí al colega, me sale un error de "Cadena demasiado larga". Entonces he tenido que implementar el código que muestro a continuación. Alguien sabe de alguna manera de obtener la cadena y pegarla manualmente sin que se produzca éste error?

*obtención de la cadena del archivo
lcFile64=STRCONV(FILETOSTR(GETFILE()),13)
*algunas cadenas al pegarlas al TEXT..ENDTEXT arroja el error "cadena demasiado larga"
*Entonces se debe insertar Chr(13) para acortar las lineas y evitar ese error
lcIni=1
lcRango=100
lcFileEnter=""
DO WHILE lcIni<LEN(lcFile64)
lcFileEnter=lcFileEnter+SUBSTR(lcFile64,lcIni,lcRango)+CHR(13)
lcIni=lcIni+lcRango
ENDDO
_cliptext=lcFileEnter &&esto es lo que pega al Text...EndText
------------------------------------------------------------------

Gracias
zarlu
Chetumal, Quintana Roo, México

Víctor Hugo Espínola Domínguez

unread,
Oct 16, 2023, 7:39:10 PM10/16/23
to publice...@googlegroups.com
Hola Zarlu


Saludos,
Víctor.
Lambaré - Paraguay.



Zarlu

unread,
Oct 17, 2023, 8:21:21 AM10/17/23
to Comunidad de Visual Foxpro en Español
Buenos días maestro Victor!

Gracias
zarlu
Chetumal, Quintana Roo, México

adem adem

unread,
Oct 17, 2023, 10:16:03 AM10/17/23
to publice...@googlegroups.com
Gracias Maestros, por esta recomendación, y gracias al creador por esta maravillosa herramienta. 
Un saludo

Reply all
Reply to author
Forward
0 new messages