Voglio convertire un'immagine in array di byte e viceversa. Qui, l'utente inserirà il nome dell'immagine (.jpg
) e il programma lo lo leggerà dal file e lo convertirà in un array di byte.come convertire l'immagine in array di byte in java?
risposta
BufferedImage è costituito da due classi principali: Raster & ColorModel. Raster si compone di due classi, DataBufferByte per il contenuto dell'immagine, mentre l'altro per il colore dei pixel.
se si desidera che i dati da DataBufferByte, uso:
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());
}
ora è in grado di elaborare questi byte nascondendosi testo in lsb per esempio, o un processo nel modo che si desidera.
java.io.FileInputStream è quello che stai cercando per :-)
Partenza javax.imageio
, soprattutto ImageReader
e ImageWriter
come un'astrazione per la lettura e la scrittura di file di immagine.
BufferedImage.getRGB(int x, int y)
di consente di ottenere valori RGB sul pixel indicato, che può essere suddiviso in byte.
Nota: penso che non si vogliano leggere i byte non elaborati, perché in questo caso si deve gestire tutta la compressione/decompressione.
Penso che il modo migliore per farlo è quello di leggere prima il file in un array di byte, quindi convertire l'array ad un'immagine con ImageIO.read()
Prova questo frammento di codice
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();
Se si utilizza JDK 7 è possibile utilizzare il seguente codice ..
import java.nio.file.Files;
import java.io.File;
File fi = new File("myfile.jpg");
byte[] fileContent = Files.readAllBytes(fi.toPath())
Ecco una versione completa di codice per fare questo. L'ho provato Le classi BufferedImage
e Base64
fanno il trucco principalmente. Inoltre alcuni parametri devono essere impostati correttamente.
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"));
}
}
Prova di questo codice:
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());
}
}
}
Utilizzando RandomAccessFile
sarebbe semplice e pratico.
RandomAccessFile f = new RandomAccessFile(filepath, "r");
byte[] bytes = new byte[(int) f.length()];
f.read(bytes);
f.close();
- 1. Come convertire un array di byte in Base64 in Java?
- 2. In Java, come posso convertire un InputStream in un array di byte (byte [])?
- 3. Come convertire l'immagine in array di byte e array di byte in stringa Base64 in Android?
- 4. Come convertire un array di byte in un array int?
- 5. Come convertire l'array di byte in formato esadecimale in Java
- 6. Come convertire l'array di byte in hexString in java?
- 7. Come convertire la matrice di byte in stringa in Java?
- 8. Come convertire NSData in array di byte in iPhone?
- 9. Converti ByteBuffer in byte array java
- 10. convertire 3 byte in int in java
- 11. Come convertire un'immagine WriteableBitmap in array Byte in WinRt App
- 12. Come convertire array di byte in file ZIP
- 13. Come convertire array di byte in qualsiasi tipo
- 14. Come convertire l'array di byte in NSString
- 15. convertire system.data.linq.binary in byte []
- 16. come convertire stringa in byte [] in C#
- 17. Convertire un array di byte a una classe che contiene un array di byte in C#
- 18. C# Come convertire System.Net.ConnectStream in un byte [] (array)
- 19. Come convertire pdf Byte [] Array in file scaricabili usando iTextSharp
- 20. Come convertire un XmlDocument in un array <byte>?
- 21. Byte Array in Python
- 22. Come convertire int [] a byte []
- 23. Possiamo convertire un array di byte in un InputStream in Java?
- 24. array di byte in groove
- 25. array di byte in pdf
- 26. Convertire un array di byte in intero in Java e viceversa
- 27. C#: Convertire array di byte in un galleggiante
- 28. converte array di stringhe in array di byte
- 29. Java: come "tagliare" un array di byte?
- 30. Come inizializzare un array di byte in Java?
Probabilmente non un duplicato: il richiedente domanda significa file immagine compresso su raster, non su come leggere byte compressi. –
D'accordo, questo * non * è un duplicato della domanda contrassegnata (almeno non facendo riferimento alla risposta accettata). Votazione per riaprire. – haraldK
Questo non è un duplicato, poiché 'File' è molto diverso da' Immagine'. –