web-dev-qa-db-ja.com

javaで画像をバイト配列に変換する方法は?

画像をバイト配列に、またはその逆に変換したい。ここで、ユーザーはイメージの名前(.jpg)を入力し、プログラムはファイルから読み取りになり、バイト配列に変換します。

61
userv

BufferedImageは、2つの主要なクラスで構成されます。 ラスターとカラーモ​​デル。ラスター自体は2つのクラスで構成されています。DataBufferByte画像コンテンツ用、もう1つはピクセルカラー用です。

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のテキストを非表示にしてこれらのバイトを処理したり、必要に応じて処理したりできます。

64
Wajdy Essam

JDK 7を使用している場合は、次のコードを使用できます。

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

File fi = new File("myfile.jpg");
byte[] fileContent = Files.readAllBytes(fi.toPath())
61
Darryl Coward
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();
28
user717325

このコードスニペットをお試しください

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

// Process image

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

これを行うためのコードの完全なバージョンを次に示します。私はそれをテストしました。 BufferedImageおよびBase64クラスは、主にトリックを実行します。また、いくつかのパラメーターを正しく設定する必要があります。

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"));
    }
}

参照リンク

6
Ryan

javax.imageio、特にImageReaderImageWriterをチェックして、イメージファイルの読み取りと書き込みの抽象化を確認してください。

BufferedImage.getRGB(int x, int y) thanは、指定されたピクセルのRGB値を取得できるようにします。RGB値は、バイト単位に分割できます。

注:すべての圧縮/解凍を処理する必要があるため、生のバイトを読みたくないと思います。

3
b_erb

Java.io.FileInputStreamはあなたが探しているものです:-)

1
Vanya

それを行う最善の方法は、最初にファイルをバイト配列に読み取り、次にImageIO.read()で配列を画像に変換することだと思います

0
Maurice Perry

RandomAccessFileを使用すると簡単で便利です。

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