Я хочу сохранить BufferedImage (с именем «результат»):

boolean bres = ImageIO.write(result, ".png", new File(saveP)); 

Но bres всегда равен нулю.

Этот

ImageIO.getWriterFormatNames()

Возвращает это:

jpg BMP bmp JPG jpeg wbmp png JPEG PNG WBMP GIF gif

Я смогу сохранить как png.

И тип BufferedImage - "2"

BufferedImage@137695c: type = 2 DirectColorModel: rmask=ff0000 gmask=ff00 bmask=ff amask=ff000000 IntegerInterleavedRaster: width = 720 height = 576 #Bands = 4 xOff = 0 yOff = 0 dataOffset[0] 0

Тип 2 - «ARGB».

Почему я не могу сохранить BufferedImage?

РЕДАКТИРОВАТЬ: saveP = "ex000567.png"

5
user3363881 13 Мар 2014 в 12:42
Можете ли вы предоставить подробную информацию о результате и saveP и изменить .png на png
 – 
Kick
13 Мар 2014 в 12:44
Все детали результата находятся на объекте «BufferedImage@137695c».
 – 
user3363881
13 Мар 2014 в 12:47

3 ответа

Лучший ответ
private static void savePNG( final BufferedImage image, final String path ){
        try {
            RenderedImage rendImage = image;
            ImageIO.write(rendImage, "PNG", new File(path));
        } catch ( IOException e) {
            e.printStackTrace();
        }
    }

Протестируйте эту функцию. Этот мне подходит.

Важным изменением является то, что второй параметр ImageIO.write изменен с ".png" на "PNG" (строчные буквы "png" также будут работать), см. Вывод ImageIO.getWriterFormatNames() для действительных имен.

8
Harald K 13 Мар 2014 в 13:54
Проблема с форматом изображения
 – 
Kick
13 Мар 2014 в 12:47

FormateName не должно быть "png" не ".png"

1
Alya'a Gamal 13 Мар 2014 в 12:46

Для тех, кто испытывает эту проблему с файлами JPEG, убедитесь, что ваше буферизованное изображение не имеет альфа-канала. В противном случае com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi#canEncodeImage отклонит ваше изображение.

Например, вместо BufferedImage.TYPE_INT_ARGB используйте BufferedImage.TYPE_INT_RGB или что-то еще, что не имеет альфа-канала.

1
yerlilbilgin 26 Май 2022 в 13:45