5

bufferedimage をjpgファイルに書き込む際に問題が発生しています。私の方法でbufferedimageは、ファイルに書き込む必要があるasパラメータを取得しています-

ここに私がやっていることがあります:

public boolean writeToFile(BufferedImage buff,String savePath) {

        try {

            System.out.println(buff.toString());
            ImageIO.write(buff, ".jpg", new File(savePath));
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        } 
   }

によって印刷されるものは次のbuff.toString()とおりです。

BufferedImage@8046f4: type = 1 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=0 IntegerInterleavedRaster: width = 1024 height = 172 #Bands = 3 xOff = 0 yOff = 0 dataOffset[0] 0

プログラムは例外なく正常に実行されますが、生成される jpg ファイルのサイズは0 bytes

ImageIO を使用せずに画像を書き込んでみました:

public boolean writeToFile(BufferedImage buff,String savePath) {



        try {

            System.out.println("got image : " + buff.toString());
            Iterator iter = ImageIO.getImageWritersByFormatName("jpeg");
            ImageWriter writer = (ImageWriter)iter.next();
            ImageWriteParam iwp = writer.getDefaultWriteParam();


            iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
            iwp.setCompressionQuality(.5f); 


            File file = new File(savePath);
            FileImageOutputStream output = new FileImageOutputStream(file);
            writer.setOutput(output);
            IIOImage image = new IIOImage(buff, null, null);
            writer.write(null, image, iwp);
            writer.dispose();

            return true;
        } catch (Exception e) {
             e.printStackTrace();
        }

        return false;
    }

そして、これは絶対にうまくいきます。

ImageIO で動作しないのはなぜですか?

4

2 に答える 2

9

.形式名から を削除します。

ImageIO.write(buff, "jpg", new File(savePath));
于 2012-07-17T21:11:07.037 に答える
4

信じられないかもしれませんが、これ".jpg"は「jpg」に変更するだけで問題なく動作します。

同じ問題がありましたが、ImageIOを見て、このリンクを見つけました。

于 2012-07-17T21:12:47.740 に答える