Конвертировать байт изображения [] в файл - PullRequest
0 голосов
/ 27 августа 2011

Я пытаюсь преобразовать изображение (png, jpg, tiff, gif) в файл на диске. Когда я просматриваю его после сохранения в файле, я не вижу файл.

Вот код, который я пробовал на основе других обсуждений на форуме:

byte[] inFileName = org.apache.commons.io.FileUtils.readFileToByteArray(new File("c:/test1.png"));

InputStream inputStream = new ByteArrayInputStream(inFilename);
..String fileName="test.png";
Writer writer = new FileWriter(fileName);
IOUtils.copy(inputStream, writer,"ISO-8859-1");

Это создает файл png, который я не вижу.

Я попытался использовать ImageIO на основе какого-то другого обсуждения, но не смог заставить его работать. Любая помощь приветствуется.

    Image inImage = ImageIO.read(new ByteArrayInputStream(inFilename));
BufferedImage outImage = new BufferedImage(100, 100,
            BufferedImage.TYPE_INT_RGB); 
 OutputStream os = new FileOutputStream(fileName);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
//encoder.encode(inImage);

Ответы [ 2 ]

3 голосов
/ 27 августа 2011

Вы должны написать это FileOutputStream напрямую.

InputStream input = new ByteArrayInputStream(bytes);
OutputStream output = new FileOutputStream(fileName);
IOUtils.copy(input, output);

Изображения являются двоичными данными, а не символьными данными. Вы не должны использовать Writer, это для символьных данных, но вы должны использовать OutputStream, это для двоичных данных. BufferedImage и JPEGImageEncoder бессмысленны, если вы не хотите манипулировать изображением.

0 голосов
/ 27 августа 2011

Что вы пытаетесь сделать;прочитать изображение в формате PNG и сохранить его в формате JPEG?

Ваш первый фрагмент кода не будет работать, поскольку вы используете Writer для записи данных.A Writer подходит только для записи текстовых файлов.Файлы PNG и JPEG содержат двоичные данные, а не текст.

Вы можете загрузить изображение с помощью API ImageIO:

BufferedImage img = ImageIO.read(new File("C:/test.png"));

, а затем записать его в другом формате с помощью API ImageIO:

ImageIO.write(img, "jpg", new File("C:/test.jpg"));
...