質問

私はクライアントからバイト配列を取得するサーバーサイドのJavaコードを持っています。画像処理を実行するためには、バイト配列をBufferedImageに変換する必要があります。私はここでそれをすることになっているコードを持っています:

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

    // bufferedImage is null
    //...
}
.

しかしこれはうまくいきません。BufferedImageはNULLです。ImageIOのマニュアルによると:

結果のストリームを読み取ることができるように登録されていない場合は、ImageReaderが返されます。

nullにどのような画像タイプがあるかを教えてください。たとえば、JPEG(私の場合、それがある)である画像を知っている場合、私は何をすることになっていますか?

編集:ファイルがJPEG形式ではない可能性が高いという提案をありがとう。これは、データをサーバーに送信するクライアントサイドコードです。

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
}
.

とこれはprocessImage()関数を呼び出すサーバーサイドコードです。

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

役に立ちましたか?

解決

最も可能性の高い説明は、バイト配列がJPEGイメージを含むことです。(たとえば、ダウンロードしようとした場合は、Error Diagnosticが診断されたHTML文書がある可能性があります。)その場合は、これが何を原因であるかを見つけて修正する必要があります。

しかし、バイト配列に与えられたフォーマットの画像が含まれていることを「知っている」場合は、次のようなものができます。

  1. ImageIO.getImageReadersByFormatNameまたはImageIO.getImageReadersByMIMETypeを使用して、Iterator<ImageReader>を使用します。
  2. ImageReaderから最初のIteratorを引きます。
  3. MemoryCacheImageInputStreamを作成します。タイプのByteArrayInputStreamを作成します。
  4. ImageReader.setInputを使用して、リーダーをImageInputStreamに接続します。
  5. ImageReader.readを使用してBufferedImageを使用します。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top