1

バイトの配列を持つファイルを読んでいます。FileUtilsのメソッドreadFileToByteArrayを使用するためにApacheCommonsIOライブラリをダウンロードしました

File file = new File("/home/username/array.txt");
FileUtils fu = new FileUtils();
byte[] array = FileUtils.readFileToByteArray(file);

バイトの配列を画像に変換したい。

ByteArrayInputStream bis = new ByteArrayInputStream(array);
Iterator<?> readers = ImageIO.getImageReadersByFormatName("gif");

ImageReader reader = (ImageReader) readers.next();
Object source = bis;

ImageInputStream iis = ImageIO.createImageInputStream(source);

reader.setInput(iis, true);
ImageReadParam param = reader.getDefaultReadParam();

Image image = reader.read(0, param); // this line is the problem

コードが参照された行に移動すると、例外がスローされます。

javax.imageio.IIOException: Unexpected block type 128!

この例外が何を意味するのかわからないので、修正する方法がわかりません。役立つ可能性のあるその他の情報は、要求する必要があります。

ありがとう

4

4 に答える 4

1

取得したら、 ImageIObyte[]を使用してBufferedImageに書き込むことができます。

BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(array));
ImageIO.write(bImageFromConvert, "gif", new File("c:/test.gif"));
于 2013-02-18T13:19:18.783 に答える
1

このコードは、リーダーが画像ファイルのメタデータを解読できなかったことを意味します。適切なファイルが読み取られ、整形されていることを確認してください。または、別のファイルタイプを予期している可能性があります。

于 2013-02-18T13:23:32.040 に答える
1

このファイルであなたのコードを試しましたが、正常に動作します。

あなたのフォーマットは何array.txtですか?readFileToByteArray()はバイナリ形式を想定しており、画像リーダーはさらにそれがGIFファイルであることを想定しています。

于 2013-02-18T13:27:20.397 に答える
0

byte []なしでは、これはマルチパートファイル転送に適していると思います。これには、apacheの一般的なjarファイルが必要です。

    final FileOutputStream output = new FileOutputStream("D:\\Dir\\"+ request.getParameter("imageName") + ".jpg");
        IOUtils.copy(request.getPart("file").getInputStream(), output);
        output.close();
于 2013-07-26T10:56:30.877 に答える