web-dev-qa-db-fra.com

comment convertir une image en tableau d'octets en java?

Je veux convertir une image en tableau d'octets et vice versa. Ici, l’utilisateur entrera le nom de l’image (.jpg) et le programme le lira le lira dans le fichier et le convertira en un tableau d’octets.

58
userv

BufferedImage comprend deux classes principales: Raster et ColorModel. Le raster lui-même est constitué de deux classes, DataBufferByte pour le contenu de l'image, l'autre pour la couleur des pixels.

si vous voulez les données de DataBufferByte, utilisez: 

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

vous pouvez maintenant traiter ces octets en cachant du texte dans lsb, par exemple, ou le traiter comme vous le souhaitez.

61
Wajdy Essam

Si vous utilisez JDK 7, vous pouvez utiliser le code suivant.

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

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

Essayez cet extrait de code

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

// Process image

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

Voici une version complète du code pour cela. Je l'ai testé. Les classes BufferedImage et Base64 font principalement l'affaire. De plus, certains paramètres doivent être définis correctement. 

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

Lien de référence

5
Ryan

Consultez javax.imageio, en particulier ImageReader et ImageWriter en tant qu'abstraction pour lire et écrire des fichiers image.

BufferedImage.getRGB(int x, int y) than vous permet d'obtenir des valeurs RVB sur le pixel donné, qui peuvent être découpées en octets.

Remarque: je pense que vous ne voulez pas lire les octets bruts, car vous devez alors gérer toute la compression/décompression.

3
b_erb

Java.io.FileInputStream est ce que vous recherchez :-)

2
Vanya

Je pense que la meilleure façon de faire est de commencer par lire le fichier dans un tableau d'octets, puis de convertir le tableau en image avec ImageIO.read ()

0
Maurice Perry

Utiliser RandomAccessFile serait simple et pratique.

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