Program Tip

자바에서 이미지를 바이트 배열로 변환하는 방법은 무엇입니까?

programtip 2020. 11. 29. 12:12
반응형

자바에서 이미지를 바이트 배열로 변환하는 방법은 무엇입니까?


이 질문에 이미 답변이 있습니다.

이미지를 바이트 배열로 또는 그 반대로 변환하고 싶습니다. 여기에서 사용자는 이미지의 이름 ( .jpg)을 입력하고 프로그램은 파일에서이를 읽고이를 바이트 배열로 변환합니다.


BufferedImage는 Raster 및 ColorModel 의 두 가지 주요 클래스로 구성됩니다 . 래스터 자체는 이미지 콘텐츠를위한 DataBufferByte 와 픽셀 색상을위한 두 개의 클래스로 구성됩니다 .

DataBufferByte의 데이터를 원하면 다음을 사용하십시오.

public byte[] extractBytes (String ImageName) throws IOException {
 // open image
 File imgPath = new File(ImageName);
 BufferedImage bufferedImage = ImageIO.read(imgPath);

 // get DataBufferBytes from Raster
 WritableRaster raster = bufferedImage .getRaster();
 DataBufferByte data   = (DataBufferByte) raster.getDataBuffer();

 return ( data.getData() );
}

이제 예를 들어 lsb에 텍스트를 숨기거나 원하는 방식으로 처리하여 이러한 바이트를 처리 할 수 ​​있습니다.


JDK 7을 사용하는 경우 다음 코드를 사용할 수 있습니다.

import java.nio.file.Files;
import java.io.File;

File fi = new File("myfile.jpg");
byte[] fileContent = Files.readAllBytes(fi.toPath())

File fnew=new File("/tmp/rose.jpg");
BufferedImage originalImage=ImageIO.read(fnew);
ByteArrayOutputStream baos=new ByteArrayOutputStream();
ImageIO.write(originalImage, "jpg", baos );
byte[] imageInByte=baos.toByteArray();

이 코드 스 니펫 시도

BufferedImage image = ImageIO.read(new File("filename.jpg"));

// Process image

ImageIO.write(image, "jpg", new File("output.jpg"));

다음은이를위한 완전한 버전의 코드입니다. 나는 그것을 테스트했다. BufferedImageBase64클래스는 주로 트릭을 할. 또한 일부 매개 변수를 올바르게 설정해야합니다.

public class SimpleConvertImage {
    public static void main(String[] args) throws IOException{
        String dirName="C:\\";
        ByteArrayOutputStream baos=new ByteArrayOutputStream(1000);
        BufferedImage img=ImageIO.read(new File(dirName,"rose.jpg"));
        ImageIO.write(img, "jpg", baos);
        baos.flush();

        String base64String=Base64.encode(baos.toByteArray());
        baos.close();

        byte[] bytearray = Base64.decode(base64String);

        BufferedImage imag=ImageIO.read(new ByteArrayInputStream(bytearray));
        ImageIO.write(imag, "jpg", new File(dirName,"snap.jpg"));
    }
}

참조 링크


체크 아웃 javax.imageio특히, ImageReaderImageWriter이미지 파일을 읽고 쓰기위한 추상화한다.

BufferedImage.getRGB(int x, int y) 주어진 픽셀에서 RGB 값을 얻을 수 있으며, 이는 바이트로 청크 될 수 있습니다.

참고 : 원시 바이트를 읽고 싶지 않다고 생각합니다. 모든 압축 / 압축 풀기를 처리해야하기 때문입니다.


java.io.FileInputStream은 당신이 찾고있는 것입니다 :-)


이를 수행하는 가장 좋은 방법은 먼저 파일을 바이트 배열로 읽은 다음 ImageIO.read ()를 사용하여 배열을 이미지로 변환하는 것입니다.


사용 RandomAccessFile은 간단하고 편리합니다.

RandomAccessFile f = new RandomAccessFile(filepath, "r");
byte[] bytes = new byte[(int) f.length()];
f.read(bytes);
f.close();

참고URL : https://stackoverflow.com/questions/3211156/how-to-convert-image-to-byte-array-in-java

반응형