Quiero convertir una imagen en matriz de bytes y viceversa. Aquí, el usuario ingresará el nombre de la imagen (.jpg
) y el programa será léelo desde el archivo y lo convertirá en una matriz de bytes.cómo convertir imágenes en matriz de bytes en java?
Respuesta
BufferedImage consta de dos clases principales: Raster & ColorModel. Raster en sí consiste en dos clases, DataBufferByte para el contenido de la imagen, mientras que el otro para el color del píxel.
si desea que los datos de DataBufferByte, utilice:
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 el proceso de la manera que desee.
si la imagen está respaldada por una matriz corta (que fue el caso para mí y una imagen tif), le dará un DataBufferShort que da como resultado una excepción de conversión – Karussell
para estas clases ¿necesito algún jarrón adicional? – praveen
No, en Eclipse simplemente use Ctrl + Shift + o. – RichardK
java.io.FileInputStream es lo que estás buscando :-)
Salida javax.imageio
, especialmente ImageReader
y ImageWriter
como una abstracción para leer y escribir archivos de imagen.
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 ocuparse de toda la compresión/descompresión.
Creo que la mejor manera de hacerlo es leer primero el archivo en una matriz de bytes, a continuación, convertir la matriz a una imagen con ImageIO.read()
Prueba este fragmento de código
BufferedImage image = ImageIO.read(new File("filename.jpg"));
// Process image
ImageIO.write(image, "jpg", new File("output.jpg"));
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();
Si está utilizando JDK 7 se puede utilizar 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())
Aquí es 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"));
}
}
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());
}
}
}
Usando RandomAccessFile
sería simple y práctico.
RandomAccessFile f = new RandomAccessFile(filepath, "r");
byte[] bytes = new byte[(int) f.length()];
f.read(bytes);
f.close();
- 1. Cómo convertir imágenes en matriz de bytes
- 2. Convertir cadena de Java en matriz de bytes
- 3. Cómo convertir una matriz de bytes en una matriz int?
- 4. Convertir matriz de bytes en Bitset
- 5. Java: Convertir bytes a entero
- 6. Convertir imágenes de Java a tamaño de matriz de bytes, problemas
- 7. ¿Cómo convertir una matriz de bytes en doble en C?
- 8. Java: convertir la lista de bytes en una matriz de bytes
- 9. Convertir matriz de bytes a matriz corta en C#
- 10. Convertir estructura en bytes
- 11. Convertir cadena JRuby a matriz de bytes Java, y viceversa
- 12. convertir matriz de cadena a matriz de bytes
- 13. Cómo convertir un entero a matriz de bytes en php
- 14. ¿Cómo convertir NSData a matriz de bytes en iPhone?
- 15. ¿Cómo convertir una matriz de bytes a una matriz int?
- 16. En Java, ¿cómo puedo convertir un InputStream en una matriz de bytes (byte [])?
- 17. cómo convertir la matriz de bytes en una matriz de enteros
- 18. ¿Cómo convierto una matriz de bytes Java en una matriz de bytes Scala?
- 19. Convertir una matriz de bytes a una clase que contiene una matriz de bytes en C#
- 20. Convirtiendo cualquier objeto a una matriz de bytes en java
- 21. convertir mapa de bits en matriz de bytes
- 22. Java: ¿Cómo "recortar" una matriz de bytes?
- 23. Convertir matriz de bytes a archivo wav
- 24. Convertir una matriz de cadenas a matriz de bytes
- 25. Python: convertir cadena a matriz de bytes
- 26. matriz de bytes en groovy
- 27. ¿Podemos convertir una matriz de bytes en un InputStream en Java?
- 28. C#: Convertir matriz de bytes en un flotador
- 29. ¿Convertir una matriz de bytes a cadena en Silverlight?
- 30. ¿Convertir matriz de bytes a matriz de bits?
Probablemente no es un duplicado: La pregunta asker significa archivo de imagen comprimida en ráster, no cómo leer los bytes comprimidos. –
De acuerdo, este es * no * un duplicado de la pregunta marcada (al menos no refiriéndose a la respuesta aceptada). Votando para reabrir – haraldK
Esto no es un duplicado, ya que 'File' es muy diferente de' Image'. –