convertir - java file byte array
cómo convertir imagen a matriz de bytes en java? (10)
Esta pregunta ya tiene una respuesta aquí:
- Archivo a byte [] en Java 21 respuestas
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"));
}
}
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();