imagen convertir convert bytes array java image bytearray

convertir - java file byte array



cómo convertir imagen a matriz de bytes en java? (10)

Esta pregunta ya tiene una respuesta aquí:

Quiero convertir una imagen a matriz de bytes y viceversa. Aquí, el usuario ingresará el nombre de la imagen ( .jpg ) y el programa lo leerá del archivo y lo convertirá en una matriz de bytes.


Aquí hay una versión completa del código para hacer esto. Lo he probado La clase BufferedImage y Base64 hacen el truco principalmente. Además, algunos parámetros deben configurarse correctamente.

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

Link de referencia


BufferedImage consta de dos clases principales: Raster y ColorModel . Raster en sí mismo consta de dos clases, DataBufferByte para el contenido de la imagen, mientras que el otro para el color del píxel.

si desea los datos de DataBufferByte, use:

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

ahora puede procesar estos bytes al ocultar texto en lsb, por ejemplo, o procesarlo de la manera que desee.


Consulte javax.imageio , especialmente ImageReader e ImageWriter como una abstracción para leer y escribir archivos de imágenes.

BufferedImage.getRGB(int x, int y) que le permite obtener valores RGB en el píxel dado, que se pueden dividir en bytes.

Nota: creo que no quiere leer los bytes sin formato, porque entonces tiene que lidiar con toda la compresión / descompresión.


Creo que la mejor manera de hacerlo es leer primero el archivo en una matriz de bytes, luego convertir la matriz en una imagen con ImageIO.read ()


Prueba este código:

public class ImageTest { public static void main(String[] args) { try { byte[] imageInByte; BufferedImage originalImage = ImageIO.read(new File( "c:/darksouls.jpg")); // convert BufferedImage to byte array ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(originalImage, "jpg", baos); baos.flush(); imageInByte = baos.toByteArray(); baos.close(); // convert byte array back to BufferedImage InputStream in = new ByteArrayInputStream(imageInByte); BufferedImage bImageFromConvert = ImageIO.read(in); ImageIO.write(bImageFromConvert, "jpg", new File( "c:/new-darksouls.jpg")); } catch (IOException e) { System.out.println(e.getMessage()); } } }


Pruebe este fragmento de código

BufferedImage image = ImageIO.read(new File("filename.jpg")); // Process image ImageIO.write(image, "jpg", new File("output.jpg"));


Si está utilizando JDK 7 puede usar el siguiente código ...

import java.nio.file.Files; import java.io.File; File fi = new File("myfile.jpg"); byte[] fileContent = Files.readAllBytes(fi.toPath())


Usar RandomAccessFile sería simple y útil.

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


java.io.FileInputStream es lo que estás buscando :-)


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