Il existe déjà des milliers d'exemple sur internet sur comment convertire
une image vers un tableau des byte [] en java et vis versa, récement j'ai eu l'occasion de travailer sur un petit projet qui m'oblige a convertire une image vers un tableau de bytes, stocker dans une base des données et de récuperer l'image par la suite.
Ma recherche sur internet n'etait pas satisfaisante vu que j'arrive pa
a convertire les images de n'importe types gif, tiff, jpeg, jpg, png ...
Le but de cette article est donc de présenter et expliquer
comment on converti tous type d'images vers un tableau de bytes en java ..
On commence par créer une classe Utils avec des methodes
static
Premiere methode : convertire une image vers un tableau de bytes byte [] prend comme paramétre le chemin d'image à convertire
Pour la deuxiéme méthode : convertire un tableau de bytes byte[] vers une image ici la format de l'image et JPEG vous pouvez la changer de votre choix
imageFile : chemin vers le path destination
bytes : le tableau des byte [] a convertire
Notre Class Utils :
Et enfin une petite Class de test
Dans un autre article je vous explique comment afficher une image converti en byte dans une page web
une image vers un tableau des byte [] en java et vis versa, récement j'ai eu l'occasion de travailer sur un petit projet qui m'oblige a convertire une image vers un tableau de bytes, stocker dans une base des données et de récuperer l'image par la suite.
Ma recherche sur internet n'etait pas satisfaisante vu que j'arrive pa
a convertire les images de n'importe types gif, tiff, jpeg, jpg, png ...
Le but de cette article est donc de présenter et expliquer
comment on converti tous type d'images vers un tableau de bytes en java ..
On commence par créer une classe Utils avec des methodes
static
Premiere methode : convertire une image vers un tableau de bytes byte [] prend comme paramétre le chemin d'image à convertire
public static byte [] ImageToByte(File filePath) throw FileNotFoundException{ FileInputStream fis = new FileInputStream(filePath); ByteArrayOutputStream bos = new ByteArrayOutputStream(); byte[] buf = new byte[1024]; try { for (int readNum; (readNum = fis.read(buf)) != -1;) { bos.write(buf, 0, readNum); System.out.println("read " + readNum + " bytes,");} } catch (IOException ex) { } byte[] bytes = bos.toByteArray(); return bytes; } |
imageFile : chemin vers le path destination
bytes : le tableau des byte [] a convertire
public static void byteToImage(byte [] bytes,File imageFile) throws IOException{ ByteArrayInputStream bis =new ByteArrayInputStream(bytes); Iterator<?> readers =ImageIO.getImageReadersByFormatName("jpeg"); ImageReader reader =(ImageReader) readers.next(); Object source = bis; ImageInputStream iis =ImageIO.createImageInputStream(source); reader.setInput(iis, true); ImageReadParam param =reader.getDefaultReadParam(); Image image = reader.read(0,param); BufferedImage bufferedImage= new BufferedImage(image.getWidth(null), image.getHeight(null),BufferedImage.TYPE_INT_RGB); Graphics2D g2 =bufferedImage.createGraphics(); g2.drawImage(image, null,null); ImageIO.write(bufferedImage,"jpeg", imageFile); System.out.println(imageFile.getPath()); } |
Notre Class Utils :
import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Iterator; import java.util.logging.Level; import javax.imageio.ImageIO; import javax.imageio.ImageReadParam; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; public class Utils { public static byte [] ImageToByte(File filePath) throws FileNotFoundException{ FileInputStream fis = new FileInputStream(filePath); ByteArrayOutputStream bos =new ByteArrayOutputStream(); byte[] buf = new byte[1024]; try { for (int readNum; (readNum = fis.read(buf)) != -1;) { bos.write(buf, 0, readNum); System.out.println("read " + readNum + " bytes,"); } } catch (IOException ex) { } byte[] bytes =bos.toByteArray(); return bytes; } public static void byteToImage(byte [] bytes,File imageFile) throws IOException{ ByteArrayInputStream bis =new ByteArrayInputStream(bytes); Iterator<?> readers =ImageIO.getImageReadersByFormatName("jpeg"); ImageReader reader =(ImageReader) readers.next(); Object source = bis; ImageInputStream iis =ImageIO.createImageInputStream(source); reader.setInput(iis, true); ImageReadParam param =reader.getDefaultReadParam(); Image image = reader.read(0,param); BufferedImage bufferedImage= new BufferedImage(image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_INT_RGB); Graphics2D g2 =bufferedImage.createGraphics(); g2.drawImage(image, null,null); ImageIO.write(bufferedImage,"jpeg", imageFile); System.out.println(imageFile.getPath()); } } |
public static void main(String[] args) throws FileNotFoundException, IOException { try { byte [] bytes = Utils.ImageToByte(new File("c:/chemin_source/fileSource.png")); Utils.byteToImage(bytes,new File("c:/chemin_destination/fileDestination.jpeg")); } catch (Exception e) { e.printStackTrace(); } } } |
je suis debutante en java, et g essayé de compiler la 1ere partie ( image to byteArray) et son test avec eclipse mais ça fonctionne pas, on me renvoi :
RépondreSupprimerat java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.(Unknown Source)
est ce que vs pouvez m'aider svp ?? :(