byte [] в изображение jpg? - PullRequest
1 голос
/ 14 июля 2020

У меня есть следующий код, который преобразует изображение в byte []:

BufferedImage image = ImageIO.read(new File("Path/To/Custom/image.jpg"));
ByteArrayOutputStream baos=new ByteArrayOutputStream(1000);
ImageIO.write(image, "jpg", baos);
byte[] imageBytes = baos.toByteArray();

Этот код работает совершенно нормально, по крайней мере, я получаю массив байтов, содержащий разные значения. Но теперь наступает трудная часть: байт [] должен быть снова преобразован в образ. Следующий код не работает, ImageIO.read(...) возвращает null. Я прочитал документацию, но все еще не могу понять, что нужно изменить, чтобы код работал так, как я хочу.

ByteArrayInputStream ba = new ByteArrayInputStream(imageBytes);
BufferedImage image = ImageIO.read(ba);
//image is always null, no matter what the stream or the byte values are.

Ответы [ 2 ]

2 голосов
/ 14 июля 2020
import java.io.ByteArrayOutputStream;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class ByteArrayToImage {
   public static void main(String args[]) throws Exception {
      BufferedImage bImage = ImageIO.read(new File("sample.jpg"));
      ByteArrayOutputStream bos = new ByteArrayOutputStream();
      ImageIO.write(bImage, "jpg", bos );
      byte [] data = bos.toByteArray();
      ByteArrayInputStream bis = new ByteArrayInputStream(data);
      BufferedImage bImage2 = ImageIO.read(bis);
      ImageIO.write(bImage2, "jpg", new File("output.jpg") );
      System.out.println("image created");
   }
}

Измените это по своему усмотрению.

1 голос
/ 14 июля 2020

Попробуйте прочитать ByteArrayInputStream на ImageIO.read(), а не ByteArrayOutputstream.

...