Pregunta

Tengo un servidor-lado de código java que se obtiene una matriz de bytes desde el cliente.A fin de hacer algunas de procesamiento de imágenes, que necesito para convertir la matriz de bytes en un BufferedImage.Tengo un código que se supone que lo que aquí:

public void processImage(byte[] data) {
    ByteArrayInputStream stream = new ByteArrayInputStream(data);
    BufferedImage bufferedImage;
    bufferedImage = ImageIO.read(stream);

    // bufferedImage is null
    //...
}

Pero esto no funciona;bufferedImage es nulo.De acuerdo a la ImageIO documentación:

Si no registrado ImageReader dice ser capaz de leer el flujo resultante, null se devuelve.

¿Cómo puedo decirle a la ImageReader ¿qué tipo de imagen es.Por ejemplo, si yo sé que la imagen JPEG (que es, en mi caso), ¿qué se supone que tengo que hacer?

EDITAR: Gracias por la sugerencia de que el archivo es más probable que no en formato JPEG.Este es el código del lado del cliente que tengo que envía los datos como la Cuerda sobre el servidor:

import org.json.JSONObject;

// Client-side code that sends image to server as String
public void sendImage() {
    FileInputStream inputStream = new FileInputStream(new File("myImage.jpg"));
    ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
    byte[] b = new byte[1024];
    while ((bytesRead = inputStream.read(b)) != -1) {
        byteStream.write(b,0,bytesRead);
    }
    byte[] byteArray = byteStream.toByteArray();

    JSONObject jsonObject = new JSONObject();
    jsonObject.put("data",new String(byteArray));

    // ... more code here that sends jsonObject in HTTP post body
}

Y este es el código del lado del servidor que llama a la processImage() función:

// Server-side code that calls processImage() function
public void handleRequest(String jsonData) {
    JSONObject jsonObject = new JSONObject(jsonData);
    processImage(jsonObject.getString("data").getBytes());
}
¿Fue útil?

Solución

La explicación más probable es que la matriz de bytes no contiene una imagen JPEG.(Por ejemplo, si has intentado descargar, usted puede tener un documento HTML dando un error de diagnóstico.) Si ese es el caso, usted tendrá que encontrar cuál es la causa de esto y solucionarlo.

Sin embargo, si usted "sabe" que la matriz de bytes que contiene una imagen con un formato determinado, se podría hacer algo como esto:

  1. Uso ImageIO.getImageReadersByFormatName o ImageIO.getImageReadersByMIMEType para obtener una Iterator<ImageReader>.
  2. Tire de la primera ImageReader a partir de la Iterator.
  3. Crear un MemoryCacheImageInputStream ajuste de una ByteArrayInputStream para los tipos.
  4. Uso ImageReader.setInput para conectar el lector a la ImageInputStream.
  5. Uso ImageReader.read para obtener el BufferedImage.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top