Convertir Imagen en Base64

Hola!! Quisiera saber si sabéis como puedo pasar de imagen a base 64. hago una llamada a una Api y me manda de respuesta un archivo png. Necesito guardarlo en disco o pasarlo al manejador de evento para mostrarlo pero no lo puedo hacer en formato png. Gracias de Antemano!!!

Hola Christian, por suerte Velneo tiene un comando nativo para convertir a base64 y para “desconvertir” de base64 a imagen.

lee esta documentación Convertir campo objeto a base 64. Ya con ese comando y el que está arriba de este en la documentación podrás ingeniártelas para sacar la funcionalidad que necesitas.

Saludo
Matias de Rimatcom

Bueno no es con lenguaje de velneo sino con js. Es raro que la api me mande un archivo, siempre suelen ser o url. También he intentado pasar la imagen al manejador de velneo por una variable pero no ha funcionado.

Lee la documentación que te envié.
Tu trae la imagen como quieras, por API, por SDV o hasta con un pendrive ese no es el punto, el punto es que una vez tienes tu .PNG o .JPG lo conviertas a base64, una vez convertido guardas esa información en un campo de la B.D, luego de eso puedes borrar la imagen que descargaste y listo.
Cuando quieras volver a sacar ese Base64 a imagen, lo “desconviertes”, esta todo en la documentación.

Hola cristhian_borges_rodriguez

Con el API y las clases VImage y VByteArray no tienes problema.

En la aplicación Mi_API de ejercicios con Velneo tienes un ejemplo en la rama 11. XMLHttpRequest - Imagen HTTP de Controles de formulario.

Ten en cuenta que pasar de PNG a JPEG implica la pérdida de transparencia y Velneo convierte a Negro la parte transparente de la imagen, lo que casi siempre no es buena solución.

Saludos
Paco Satué

Bueno la imagen como tal no la tengo xq no la he podido optener, la api me la manda pero no he podido descargarla o pasarla a base 64

Si, he estado intentando con estas clases pero sin mucho resultado, en realidad es un qr que recibo de una api de whatsapp no creqo que me afecte lo de la transparencia.

Hola cristhian_borges_rodriguez

Pon el código que estás usando para la descarga del QR. Si el QR se descarga como un PNG y tiene transparencia, al pasarlo a JPEG obtendrás un cuadro negro.

Si no veo el código que estás usando poco podemos ayudarte.
Y explica en detalle lo que quieres conseguir.

Saludos
Paco Satué

Le esta faltando un componente a tu JS para que muestre el codibo base64 a imagen en pantalla.
También deberías de ver que esa imagen te descargue en una carpeta una vez que se ejecute, pero se tiene que programar…
Actualmente tengo el acceso para Whatsapp mediante JS. Para visualizar el QR debes tener instalado qrterminal.

Porque quieres guardar el QR?, tienes apiRest para intercambiar los datos?

Tienes que instalar:
npm install qrcode

y en tu codigo deberia ir esto…

  // Generar y guardar el código QR como una imagen
  client.onStateChange((state) => {
    if (state === 'CONFLICT' || state === 'UNPAIRED') {
      // Generar el código QR como una imagen
      qrcode.toFile('qr-code.png', client.base64QR, (err) => {
        if (err) {
          console.error('Error al guardar el código QR como imagen:', err);
        } else {
          console.log('Código QR guardado como qr-code.png');
        }
      });
    }
  });

  // ...
})

Es necesario ver tu código para saber si encaja… o si puedes adaptar perfecto…

Estoy usando una Api que me proporciona un Docker para trabajar en local. el código para obtener el qr que estoy empleando es:

importClass(“XMLHttpRequest”);

var xhr = new XMLHttpRequest();
var url = ‘http://localhost:3000/api/screenshot?session=default’;

xhr.open(‘GET’, url, true);
xhr.setRequestHeader(‘accept’, ‘/’);
xhr.send();

xhr.waitForRequestComplete();
if ( (xhr.errorCode==0) && (xhr.status==200) )
{
var imagen =xhr.response;

theRoot.setVar("RES",imagen);
//theRoot.setVar("RES", json);
//theRoot.setVar("ERR_CODE", xhr.errorCode);
//theRoot.setVar("STATUS", xhr.status);

}
else
{

theRoot.setVar("RES","Has habido un error el enviar el mensaje");
//theRoot.setVar("RES", "-ERRAPI-");
//theRoot.setVar("ERR_CODE", xhr.errorCode);
//theRoot.setVar("STATUS", xhr.status);
alert ("errorCode: " + xhr.errorCode + " status: " + xhr.status);

}

Hola cristhian_borges_rodriguez.

Sigue faltándome información.

  • ¿En qué formato devuelve el API la supuesta captura de pantalla?
  • ¿Qué devuelve xhr.errorCode y xhr.status?

Quizás te falta añadir:

     xhr.responseType = "arraybuffer"

para que obtengas un ByteArray.

En la aplicación Mi_API de ejercicios con Velneo tienes un ejemplo en la rama 11. XMLHttpRequest - Imagen HTTP de Controles de formulario .

Saludos
Paco Satué