Frage

Ich habe einen serverseitigen Java-Code, der ein Byte-Array vom Client erhält.Um etwas Bildverarbeitung durchführen zu können, muss ich das Byte-Array in ein konvertieren BufferedImage.Ich habe hier einen Code, der das tun soll:

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

    // bufferedImage is null
    //...
}

Aber das funktioniert nicht;bufferedImage ist null.Laut der ImageIO-Dokumentation:

Wenn nicht registriert ImageReader behauptet, den resultierenden Stream lesen zu können, null ist zurück gekommen.

Wie sage ich das? ImageReader um welchen Bildtyp es sich handelt.Was soll ich beispielsweise tun, wenn ich weiß, dass es sich bei dem Bild um ein JPEG-Bild handelt (was in meinem Fall der Fall ist)?

BEARBEITEN: Vielen Dank für den Hinweis, dass die Datei höchstwahrscheinlich nicht im JPEG-Format vorliegt.Dies ist der clientseitige Code, den ich habe und der die Daten als String an den Server sendet:

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
}

Und das ist der serverseitige Code, der die Funktion „processImage()“ aufruft:

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

Lösung

Die wahrscheinlichste Erklärung ist das Byte-Array nicht ein JPEG-Bild enthalten.(Wenn Sie beispielsweise gerade versucht haben, es herunterzuladen, verfügen Sie möglicherweise über ein HTML-Dokument mit einer Fehlerdiagnose.) In diesem Fall müssen Sie die Ursache ermitteln und beheben.

Wenn Sie jedoch „wissen“, dass das Byte-Array ein Bild mit einem bestimmten Format enthält, können Sie Folgendes tun:

  1. Verwenden ImageIO.getImageReadersByFormatName oder ImageIO.getImageReadersByMIMEType um eine zu bekommen Iterator<ImageReader>.
  2. Ziehen Sie den ersten ImageReader von dem Iterator.
  3. Erstelle ein MemoryCacheImageInputStream einwickeln ByteArrayInputStream für die Typen.
  4. Verwenden ImageReader.setInput um das Lesegerät mit dem zu verbinden ImageInputStream.
  5. Verwenden ImageReader.read um das zu bekommen BufferedImage.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top