Java - de base64 a imagen

 
Vista:
sin imagen de perfil
Val: 11
Ha disminuido su posición en 25 puestos en Java (en relación al último mes)
Gráfica de Java

de base64 a imagen

Publicado por Pedro (14 intervenciones) el 10/07/2019 15:07:01
Buenas tardes, mi pregunta es la siguiente:
Necesito encontrar un código que coja una imagen que ha sido codificada en base64 y cree la imagen inicial.
Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 166
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

de base64 a imagen

Publicado por Cesar (52 intervenciones) el 10/07/2019 15:20:28
Hola.

Solo convierte la cadena Base 64 a arreglo de bytes, y crea el archivo/stream con ese arreglo.

En Java no se como se haga.

En C# con una simple línea se puede hacer:

1
File.WriteAllBytes("RutaArchivoImagen", Convert.FromBase64String("CadenaBase64"));
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar
sin imagen de perfil
Val: 11
Ha disminuido su posición en 25 puestos en Java (en relación al último mes)
Gráfica de Java

de base64 a imagen

Publicado por Pedro Javier (14 intervenciones) el 10/07/2019 17:01:38
Buenas tardes, gracias ante todo por responder.

El problema que tengo es que tengo una imagen en una cadena en una pagina html. La cadena es de este tipo :
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRg ... FD+EINWEUlLN14fu3zSlgxcJDmfP8MMg1IS7KQnv/iH/2Q==" alt="">

Necesito una función en java que la convierta en una imagen, al menos para jpeg y png.

He estado intentando con varias posibilidades que he encontrado en internet. Alguna me decodifica el código y crea un archivo, pero al abrirla me dice que no es correcta. No se si tiene que ver con que las imágenes necesiten algún tipo de información y yo esté traduciendo como un archivo normal.

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 166
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

de base64 a imagen

Publicado por Cesar (52 intervenciones) el 10/07/2019 17:42:50
Hola.

En vez de que valoren negativo, verifica bien la respuesta que te di antes, porque el codigo que te pase, te sirve para hacer exactamente eso que quieres (por lo menos en C#).

Suponiendo que lo que lees es el atributo "src", el codigo completo quedaria asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System;
using System.IO;
 
namespace PruebaConsola
{
   public class MainClass
   {
      public static void Main(string[] args)
      {
         var src = "data:image/jpeg;base64,/9j/4AAQSkZJRg ... FD+EINWEUlLN14fu3zSlgxcJDmfP8MMg1IS7KQnv/iH/2Q==";
         var imagen = src.Split(';');
         File.WriteAllBytes("C:\\Prueba" + (imagen[0].IndexOf("png") >= 0 ? ".png" : ".jpg"), Convert.FromBase64String(imagen[1].Substring(7)));
      }
   }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar
sin imagen de perfil
Val: 11
Ha disminuido su posición en 25 puestos en Java (en relación al último mes)
Gráfica de Java

de base64 a imagen

Publicado por Pedro Javier (14 intervenciones) el 10/07/2019 17:50:52
Perdona César. La valoración negativa estaba puesta por defecto. Yo he intentado cambiarla pero me dice que tengo que ser usuario registrado.
No era mi intención, ni mucho menos. Te agradezco que contestes mi pregunta muchísimo, pero no se cómo cambiar la valoración. Intentaré hacer un usuario.
Gracias de nuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

de base64 a imagen

Publicado por Tom (1831 intervenciones) el 10/07/2019 18:26:41
Tranquilo, Pedro, otro usuario le habrá bajado la valoración de su respuesta, seguramente por responder con "en java no se como se haga" ya que esto es el foro para java.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

de base64 a imagen

Publicado por Tom (1831 intervenciones) el 10/07/2019 17:54:08
¿ En la cadena que decodificas estás incluyendo el "/9j/" inicial ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 166
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

de base64 a imagen

Publicado por Cesar (52 intervenciones) el 10/07/2019 18:20:12
Hola.

En el codigo que yo coloque, que funciona, lo que hago es: En la cadena la separo por el ";", para tener un arreglo, con 2 elementos, el primero con el tipo de imagen, y el segundo con la cadena base64:

"data:image/jpeg;base64,/9j/4AAQSkZJRg ... FD+EINWEUlLN14fu3zSlgxcJDmfP8MMg1IS7KQnv/iH/2Q=="

Posteriormente, busca en el primer elemento del arreglo (en el data:image), si existe el texto "png", y en caso afirmativo, agrega la extension ".png", en caso contrario, agrega la extension ".jpg".

"data:image/jpeg;base64,/9j/4AAQSkZJRg ... FD+EINWEUlLN14fu3zSlgxcJDmfP8MMg1IS7KQnv/iH/2Q=="

Despues hace un SubString a partir de la ",", para leer la cadena Base64 (por lo que, contestando a la pregunta anterior, si esta tomando a partir del /9j/ que mencionan), convertirla a arreglo de bytes, y escribir dicho arreglo en el archivo.

Cabe señalar, la cadena Base64 que esta en dicho codigo, esta cortada (es de ejemplo, y pueden identificarla por los "..."), por lo que no es valida. Tienen que probar el codigo con una cadena Base64 completa.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar

de base64 a imagen

Publicado por Tom (1831 intervenciones) el 10/07/2019 18:23:13
No sé qué has probado, o cómo, pero esto funciona perfectamente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Base64;
 
/* */
public class B64 {
	/* */
	public static void main(String args[]) throws IOException {
		byte src[] = Files.readAllBytes(Paths.get("/tmp", "1.jpg"));
		byte dst[] = Base64.getEncoder().encode(src);
		// Test System.out.println(new String(dst));
		byte trans[] = Base64.getDecoder().decode(dst);
		Files.write(Paths.get("/tmp/1_new.jpg"), trans);
	}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar