comment convertir image en tableau de octets en java? [dupliquer]

cette question a déjà une réponse ici:

  • Fichier byte[] en Java 21 réponses

je veux convertir une image en byte array et vice versa. Ici, l'utilisateur devra entrer le nom de l'image ( .jpg ) et programme de lire à partir du fichier et va le transformer en un tableau d'octets.

56
demandé sur Mateen Ulhaq 2010-07-09 12:51:00

9 réponses

BufferedImage se compose de deux classes principales: Raster & ColorModel . Raster lui-même se compose de deux classes, Databufferoctet pour le contenu d'image tandis que l'autre pour la couleur de pixel.

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

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

58
répondu Wajdy Essam 2013-08-05 17:43:31

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())
49
répondu Darryl Coward 2012-05-08 12:02:02
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();
25
répondu user717325 2011-09-12 12:40:52

essayez ce code snippet

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

// Process image

ImageIO.write(image, "jpg", new File("output.jpg"));
5
répondu McK 2011-09-12 14:36:57

Voici une version complète du code pour ce faire. Je l'ai testé. Les classes BufferedImage et Base64 font l'affaire principalement. Aussi certains paramètre doit être réglé 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
répondu Ryan 2013-04-16 01:16:15

Check out javax.imageio , en particulier ImageReader et ImageWriter comme une abstraction pour lire et écrire des fichiers image.

BufferedImage.getRGB(int x, int y) vous permet d'obtenir des valeurs RGB sur le pixel donné, qui peut être divisé en octets.

Note: je pense que vous ne voulez pas lire les octets bruts, parce qu'alors vous devez faire face à toute la compression/décompression.

4
répondu b_erb 2010-07-09 08:55:49

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

2
répondu Vanya 2010-07-09 08:53:08

je pense que la meilleure façon de le faire est d'abord de lire le fichier dans un tableau octet, puis de convertir le tableau en une image avec ImageIO.lire ()

0
répondu Maurice Perry 2010-07-09 09:13:27

L'utilisation de RandomAccessFile serait simple et pratique.

RandomAccessFile f = new RandomAccessFile(filepath, "r");
byte[] bytes = new byte[(int) f.length()];
f.read(bytes);
f.close();
0
répondu Gowtham Gopalakrishnan 2014-05-18 07:50:29