2012-01-09 9 views
8

De acuerdo, básicamente, he desarrollado un sistema de carga de imágenes simple. El usuario selecciona una imagen local (utilizando la API de File/FileReader HTML5) y tiene la capacidad de recortarla antes de confirmar el resultado.Enviar el contenido de un lienzo a un servidor Java y guardarlo como una imagen

El resultado final se visualiza en un lienzo para enviarlo al servidor que estoy utilizando para DataURL. El servidor de fondo es un servidor NodeJS que necesita realizar una llamada REST a un servidor Java que creará un archivo de imagen a partir de los datos y lo guardará en el disco.

Los resultados de toDataURL tienen el formato: data: image/png; base64, DATOS ENCODED.

¿Qué necesitaría en el servidor Java para convertir la cadena en su representación binaria correcta?

+1

Ver: http://stackoverflow.com/questions/469695/decode-base64-data-in-java –

+0

posible duplicado de [Carga de datos de imagen 'canvas' en el servidor] (http://stackoverflow.com/ preguntas/1590965/uploading-canvas-image-data-to-the-server) –

Respuesta

1

Una vez que Base64-descodifique la cadena, tendrá la imagen binaria, en forma de un archivo PNG. Consulte this SO question para obtener detalles sobre cómo decodificar una cadena base64 en bytes.

5
import java.awt.image.BufferedImage; 
import java.io.ByteArrayInputStream; 
import java.io.File; 
import javax.imageio.ImageIO; 
import javax.xml.bind.DatatypeConverter; 

public class test { 
    public static void main (String[] args){ 
    try{ 
      // remove data:image/png;base64, and then take rest sting 
      String img64 = "64 base image data here"; 
     byte[] decodedBytes = DatatypeConverter.parseBase64Binary(img64); 
     BufferedImage bfi = ImageIO.read(new ByteArrayInputStream(decodedBytes));  
     File outputfile = new File("saved.png"); 
     ImageIO.write(bfi , "png", outputfile); 
     bfi.flush(); 
    }catch(Exception e) 
     { 
      //Implement exception code  
    } 

    } 
} 
0

Usted tiene que reemplazar espacio con + si su base64Image tiene Char espacio, entonces usted tiene que eliminar los datos: image/png; base64, desde el principio de la base64Image. A menos que reemplace carbon espacial, no puede obtener la imagen correcta. luego puede usar la decodificación Base64

yourBase64String = yourBase64String.replace ('', '+');

yourBase64String = yourBase64String.substring (22);

Cuestiones relacionadas