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.
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.
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())
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();
essayez ce code snippet
BufferedImage image = ImageIO.read(new File("filename.jpg"));
// Process image
ImageIO.write(image, "jpg", new File("output.jpg"));
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"));
}
}
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.
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 ()
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();