2012-01-19 13 views
6

イメージをバイト配列に変換するためのコードがあります。Javaイメージをバイト配列サイズの問題に変換する

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
ImageIO.write(image, "png", baos); 
baos.flush(); 
byte[] imageBytes = baos.toByteArray(); 
baos.close(); 

私が直面している問題は、画像のサイズが約2.65MBであることです。しかし、imageBytes.lengthは私に5.5MB以上の値を与えています。誰かが私が間違っている場所を教えてもらえますか?

+1

サイズが約2.65MBであることをどのように知っていますか?結果のバイトを開くことができますか?それは大丈夫ですか? – Thilo

+1

本当に入力イメージが本当にPNG形式ですか? – Perception

+0

@Thilo - 画像はローカルマシンからアップロードされた画像です。ローカルマシンとサーバーの両方でファイルをチェックしました。サイズは2.65MBです。私はBufferedImageを使用していますimage = ImageIO.read(inputFile);ファイルからイメージオブジェクトを作成します。はい、size []を除いて格納されたbyte []はOKです。 –

答えて

4

PNGは必ずしも忠実なラウンドトリップ形式ではありません。その圧縮アルゴリズムは異なる結果をもたらす可能性があります。

編集: JPEGと同じです。

2

次のコードを使用して問題を解決しました。

FileInputStream fis = new FileInputStream(inputFile); 

ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
byte[] buf = new byte[1024]; 
try { 
    for (int readNum; (readNum = fis.read(buf)) != -1;) { 
     bos.write(buf, 0, readNum); 
    } 
} catch (Exception ex) { 

} 
byte[] imageBytes = bos.toByteArray(); 

提供:http://www.programcreek.com/downloads/convert-image-to-byte.txt それは正常に動作しているようです。この方法で問題が発生した場合は、教えてください。

関連する問題