2012-01-20 2 views
1

BufferedImageをバイト配列に変換しようとしています。私には2つの条件があります。 1.私はイメージの品質を失うべきではありません。 2.バイト配列のサイズは、実際のイメージと同じにする必要があります。私はいくつかのオプションを試しました。BufferedImageを高品質でサイズを増やすことなくbyte []に​​変換します。

オプション1:

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

オプション2:

 WritableRaster raster = image.getRaster(); 
     DataBufferByte data = (DataBufferByte) raster.getDataBuffer(); 
     byte[] imageBytes = data.getData(); 

これらのオプションの両方が(大きな画像用二重以上)画像のサイズを増大させます。

ありがとうございました。ありがとう!

+1

私は 'java'タグを追加しました。これが正しいと思っていますか? – home

+0

イメージのサイズはどのように定義しますか?そのイメージを含むファイルのサイズ?それを保持する 'Image'インスタンスによって使用されるメモリ?前者の場合は、格納する書式に依存します。後者の場合は、実装に依存します。また、作成している '' byte [] 'のサイズとソースイメージの" size "は何ですか? – Jeffrey

+0

* "バイト配列のサイズは実際のイメージと同じでなければなりません" *これはかなり任意の必要条件です。あなたの先生、それを誰が指定しましたか? –

答えて

2

あなたはどのように画像のサイズの増加を見ている

1.オプションで、画像の品質を失うことを心配する必要はありませんので、PNG形式は、 lossless data compressionを使用していますか? imageBytes.lengthが何であるかわかります。これはあなたがこれが2倍の大きさであると思っていることと比較していますか? (あなたの想定が間違っていると思われます)

元のソースファイルは、Javaが再圧縮するよりも高い圧縮設定を使用している可能性があります。あなたはライターにいくつかの追加パラメータを渡す必要があるかもしれません。詳細については、http://www.exampledepot.com/egs/javax.imageio/JpegWrite.htmlへのリンクについては、how to compress a PNG image using Javaを参照してください。

+0

私はそれを2.65MBのディスク上の画像ファイルのサイズと比較していますが、imageBytes.lengthは私に約5MBの5000000のような番号を与えています。 –

+0

@ sure_render - ディスク上のこのファイルは、もともとBufferedImageをロードしたものだと思いますか?もしそうなら、そのフォーマットは何ですか?オリジナルが単にJavaよりも高い圧縮設定を使用している可能性があります。 – ziesemer

+0

@sure_render - 更新された回答を確認してください。 – ziesemer

関連する問題