Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ //certaines partie de ces code sont prises et adapte des sources suivantes : //http://www.programcreek.com/2009/02/java-convert-image-to-byte-array-convert-byte-array-to-image/ // https://github.com/opencv-java/ //http://answers.opencv.org/question/31505/how-load-and-display-images-with-java-using-opencv-solved/ package tisir.forms; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.StringReader; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.ShortBuffer; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import javax.management.StringValueExp; import javax.servlet.http.HttpServletRequest; import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.MatOfPoint; import org.opencv.core.Point; import org.opencv.core.Scalar; import org.opencv.core.Size; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; import org.opencv.utils.Converters; import tisir.beans.ImageObjetBean; /** * * @author Administrateur */ public final class ImageObjetForm { private static final String CHAMP_DONNEEIMAGE = "donneeImage"; private static final String CHAMP_LARGEURIMAGE = "largeurImage"; private static final String CHAMP_HAUTEURIMAGE = "hauteurImage"; public static final int TAILLE_TAMPON = 10240; // 10 ko //Intervalle de couleurs avant la couleur vert public static final int VALEURDEBUTHUE = 0; //120;// public static final int VALEURDEBUTSATURATION = 0;//35 ;//60; public static final int VALEURDEBUTVALUE = 0;//100; //25;//50; public static final int VALEURFINHUE = 30;//30;28;//388;//Nous avons exclu la couleur verte dans lintervalle de Hue ou teinte public static final int VALEURFINSATURATION = 255;//200; public static final int VALEURFINVALUE = 255; //Intervalle de couleurs aprs la couleur vert public static final int VALEURDEBUTHUE2 = 89;//122;//118; public static final int VALEURFINHUE2 = 360;//Nous avons exclu la couleur verte dans lintervalle de Hue ou teinte //Superficie minimale de contours public static final int SUPERFICIEMINIMALE_CONTOURS = 10000;//122;//118; public File file = null; public File[] files = null; //Listes des contours des images du dossier "tisirImages" et des hierarchies dans lesquelles ces contours sont contenus Map<String, Mat> listHierarchieObjetsDossierTisirImage = new HashMap<>(); Map<String, Mat> listContoursObjetsDossierTisirImage = new HashMap<>(); //Map<String, List<MatOfPoint>> //Listes des contours de l'image capture par la camra Map<String, Mat> listHierarchieObjetsImageCapturee = new HashMap<>(); Map<String, Mat> listContoursObjetsImageCapturee = new HashMap<>(); //Map<String, List<MatOfPoint>> private String resultat; private Map<String, String> erreurs = new HashMap<>();//HashMap<String, String>(); public String getResultat() { return resultat; } public Map<String, String> getErreurs() { return erreurs; } public ImageObjetBean verifierDonneeimage(HttpServletRequest request, String dossierimagespecimen, String dossierimagescapturees, String dossierimagessansbruit) throws FileNotFoundException, IOException { //Rcupration des images spcimen qui seront conserver dans le tableau files[] listeFichiersD1Dossier(dossierimagespecimen); //Chargement et traitements des images specimen l'aide d'openCV ///charger1Image(dossierimagespecimen + files[2].getName()); for (File file1 : files) { traitementImages(dossierimagespecimen + file1.getName(), file1.getName(), dossierimagessansbruit, listHierarchieObjetsDossierTisirImage, listContoursObjetsDossierTisirImage); } //Initialisation du bean reprsentant la donne d'une image ImageObjetBean imageobjet = new ImageObjetBean(); //Rcupration du champ donneeImage String donneeImage = getValeurChamp(request, CHAMP_DONNEEIMAGE); //Rcupration de la largeur de l'image String largeurImage = getValeurChamp(request, CHAMP_LARGEURIMAGE); //Rcupration de la largeur de l'image String hauteurImage = getValeurChamp(request, CHAMP_HAUTEURIMAGE); //if (erreurs.isEmpty()){ //Validation de la largeur de l'image int w = -10; try { w = validationLargeurImage(largeurImage); } catch (Exception e) { setErreur(CHAMP_LARGEURIMAGE, e.getMessage()); } imageobjet.setLargeurImage(w); //Validation de la hauteur de l'image int h = -10; try { h = validationHauteurImage(hauteurImage); } catch (Exception e) { setErreur(CHAMP_HAUTEURIMAGE, e.getMessage()); } imageobjet.setHauteurImage(h); //} //Validation de la donneeImage try { //System.out.printf("donneeImage : \n%s\n", donneeImage); validationDonneImage(donneeImage); //On crit donneeImage sur le disque ecrireDonneeImageCaptureeSurDisque(donneeImage, dossierimagescapturees); //System.out.printf("donneeImage (DEMO): \n%s\n", donneeImage); //System.out.printf("doneeeeeeeee %s\n ", findEdges(donneeImage, w, h)); } catch (Exception e) { setErreur(CHAMP_DONNEEIMAGE, e.getMessage()); } imageobjet.setDonneeImage(donneeImage); imageobjet.setNomImage("donneeImageCapture" + String.valueOf(System.currentTimeMillis())); //On reprend l'image capture dj sur disque pour des traitements de reconnaissance de forme listeFichiersD1Dossier(dossierimagescapturees); traitementImages(dossierimagescapturees + files[files.length - 1].getName(), files[files.length - 1].getName(), dossierimagessansbruit, listHierarchieObjetsImageCapturee, listContoursObjetsImageCapturee); //Si aucune erreur n'est survenue jusqu' prsent ///Comparer les donnes des images ........... comparaisonContours(); System.out.println("resultat : " + resultat); return imageobjet; } /*Suppression des bruits, conversion des couleurs en HSV pour faciliter la dtection, dtection des formes et criture sur disque*/ //Sources : http://answers.opencv.org/question/31505/how-load-and-display-images-with-java-using-opencv-solved/ public void traitementImages(String nomImage, String nomFichier, String dossierDestinationImage, Map<String, Mat> listHierarchies, Map<String, Mat> listContours) { //System.out.println("Matrice de l'image :" + Imgcodecs.imread(nomImage.toString()).dump()); System.out.println("chemin d'accs l'image : " + nomImage); Mat matriceImage = Imgcodecs.imread(nomImage); //Chargement de l'image dans une matrice carre Mat matImageArecuperer1 = new Mat(); Mat matImageArecuperer2 = new Mat(); Mat matImageArecuperer = new Mat(); Mat matFinaleOperateurMorphologiq = new Mat(); System.out.printf("%s", "Conversion de la matrice openCV d'image en BufferedImage (java) en cours ..."); System.out.printf("MatriceImage.channels () : %s\n", matriceImage.channels()); int elementBufferedImage = BufferedImage.TYPE_BYTE_GRAY; if (matriceImage.channels() > 1) { Mat matImageSansBruit = new Mat(); Mat matImageSansBruitEnHSV = new Mat(); //Suppression de bruit dans l'image encours Imgproc.bilateralFilter(matriceImage, matImageSansBruit, 5, 175, 175); ///Imgproc.blur(matriceImage, matImageSansBruit, new Size(15,15)); //Conversion en HSV Imgproc.cvtColor(matImageSansBruit, matImageSansBruitEnHSV, Imgproc.COLOR_BGR2HSV); elementBufferedImage = BufferedImage.TYPE_3BYTE_BGR; matriceImage = matImageSansBruitEnHSV; //Cette matrice est ncessaire pour la dtection } //Rcupration des seuils min et max de H, S et V avant les couleurs vert Scalar valHSVmin = new Scalar(VALEURDEBUTHUE, VALEURDEBUTSATURATION, VALEURDEBUTVALUE); Scalar valHSVmax = new Scalar(VALEURFINHUE, VALEURFINSATURATION, VALEURFINVALUE); //Rcupration des seuils min et max de H, S et V aprs les couleurs vert Scalar valHSVmin2 = new Scalar(VALEURDEBUTHUE2, VALEURDEBUTSATURATION, VALEURDEBUTVALUE); Scalar valHSVmax2 = new Scalar(VALEURFINHUE2, VALEURFINSATURATION, VALEURFINVALUE); System.out.printf("Intervalle de valeurs fix de HUE avant les couleurs dominance vert : %s%s%s", String.valueOf(valHSVmin.val[0]), " - ", String.valueOf(valHSVmax.val[0])); System.out.printf("Intervalle de valeurs fix de HUE aprs les couleurs dominance vert : %s%s%s", String.valueOf(valHSVmin2.val[0]), " - ", String.valueOf(valHSVmax2.val[0])); System.out.printf("Intervalle de valeurs fix de SATURATION : %s%s%s", String.valueOf(valHSVmin.val[1]), " - ", String.valueOf(valHSVmax.val[1])); System.out.printf("Intervalle de valeurs fix de HUE : %s%s%s", String.valueOf(valHSVmin.val[2]), " - ", String.valueOf(valHSVmax.val[2])); //////////Filtre pour laisser passer uniquement les couleurs ne contenant pas vert Core.inRange(matriceImage, valHSVmin, valHSVmax, matImageArecuperer1); Core.inRange(matriceImage, valHSVmin2, valHSVmax2, matImageArecuperer2); //On associe les lments de "matImageArecuperer1" ceux de "matImageArecuperer2" Core.add(matImageArecuperer1, matImageArecuperer2, matImageArecuperer); //Affichage l'cran de donnes binaires de l'image en cours byte[] byteImage = new byte[matriceImage.channels() * matriceImage.cols() * matriceImage.rows()]; matriceImage.get(0, 0, byteImage); ///System.out.println(nomFichier + " :: byteImage en cours : " + Arrays.toString(byteImage)); //criture des donnes de l'image encours "matriceImage" dans un BufferedImage BufferedImage imageEncours = new BufferedImage(matriceImage.cols(), matriceImage.rows(), elementBufferedImage); imageEncours.getRaster().setDataElements(0, 0, matriceImage.cols(), matriceImage.rows(), byteImage); //criture de l'image sur disque long id = System.currentTimeMillis(); String n = nomFichier; n = n + "ImageSansBruitEnHSV" + id + ".png"; ecritureDonneesImagesOpenCVdansUnFichierPNG(imageEncours, n, dossierDestinationImage); //criture des donnes de l'image reccuprer "matImageArecuperer" dans un BufferedImage byte[] byteImageArecuperer = new byte[matImageArecuperer.channels() * matImageArecuperer.cols() * matImageArecuperer.rows()]; matImageArecuperer.get(0, 0, byteImageArecuperer); ///System.out.println(nomFichier + " :: byteImageArecuperer en cours : " + Arrays.toString(byteImageArecuperer)); BufferedImage imageArecuperer = new BufferedImage(matImageArecuperer.cols(), matImageArecuperer.rows(), BufferedImage.TYPE_BYTE_BINARY); imageArecuperer.getRaster().setDataElements(0, 0, matImageArecuperer.cols(), matImageArecuperer.rows(), byteImageArecuperer); n = nomFichier + "ImageSansBruitEnHSVaRecuperer" + id + ".png"; ecritureDonneesImagesOpenCVdansUnFichierPNG(imageArecuperer, n, dossierDestinationImage); System.out.printf("%s", "Conversion de la matrice openCV d'image en BufferedImage (java) effectue avec succs!!!"); //Matrices des oprateurs erode et dilate Mat matPortionImageErode = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(7, 7)); Mat matPortionImageDilate = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(10, 10)); Imgproc.erode(matImageArecuperer, matFinaleOperateurMorphologiq, matPortionImageErode); Imgproc.erode(matImageArecuperer, matFinaleOperateurMorphologiq, matPortionImageErode); Imgproc.dilate(matImageArecuperer, matFinaleOperateurMorphologiq, matPortionImageDilate); Imgproc.dilate(matImageArecuperer, matFinaleOperateurMorphologiq, matPortionImageDilate); //criture des donnes de l'image reccuprer "matImageArecuperer" dans un BufferedImage byte[] byteImageArecupOpMorph = new byte[matFinaleOperateurMorphologiq.channels() * matFinaleOperateurMorphologiq.cols() * matFinaleOperateurMorphologiq.rows()]; matFinaleOperateurMorphologiq.get(0, 0, byteImageArecupOpMorph); ///System.out.println(nomFichier + " :: byteImageArecupOpMorph en cours : " + Arrays.toString(byteImageArecupOpMorph)); BufferedImage imageArecupOpMorph = new BufferedImage(matFinaleOperateurMorphologiq.cols(), matFinaleOperateurMorphologiq.rows(), BufferedImage.TYPE_BYTE_BINARY); imageArecupOpMorph.getRaster().setDataElements(0, 0, matFinaleOperateurMorphologiq.cols(), matFinaleOperateurMorphologiq.rows(), byteImageArecupOpMorph); n = nomFichier + "ImageSansBruitEnHSVaRecupOpMorphologiq" + id + ".png"; ecritureDonneesImagesOpenCVdansUnFichierPNG(imageArecupOpMorph, n, dossierDestinationImage); //Dterminer les contours des objets List<MatOfPoint> contoursObjets = new ArrayList<>(); Mat hierarchieObjet = new Mat(); /*Il me faut : - hierarchieObjet pour toutes images du dossier tisirImages - hierarchieObjet pour l'image capture - contoursObjets pour chaque hierarchieObjet des images du dossier tisirImages - contoursObjets pour hierarchieObjet de l'image capture */ //trouver les contours Imgproc.findContours(matFinaleOperateurMorphologiq, contoursObjets, hierarchieObjet, Imgproc.RETR_CCOMP, Imgproc.CHAIN_APPROX_SIMPLE); //S'il y a des contours if (hierarchieObjet.size().height > 0 && hierarchieObjet.size().width > 0) { listHierarchies.put(nomFichier + "MatriceHierarchie", hierarchieObjet); for (int i = 0; i >= 0; i = (int) hierarchieObjet.get(0, i)[0]) { //Conversion des MatOfPoints de "contoursObjets" en Lis<Point> List<Point> listPointsContoursObjets = new ArrayList<>(); for (int j = 0; j < contoursObjets.size(); j++) { //Conversion des MatOfPoints de "contoursObjets" en cours en Lis<Point> List<Point> listPointsContoursObjetsEncours = new ArrayList<>(); listPointsContoursObjetsEncours.addAll(contoursObjets.get(j).toList()); //Coversion de la liste points du contour listPointsContoursObjetsEncours en Matrice Mat matPointContoursObjetsEncours = Converters .vector_Point_to_Mat(listPointsContoursObjetsEncours); ///Calcul de la superficie du contours en cours double superficieContoursObjetEncours = Imgproc.contourArea(matPointContoursObjetsEncours); System.out.println(nomFichier + "::-:: matPointContoursObjets de contoursObjets " + j + " \n\t\t Taille de la matrice : " + matPointContoursObjetsEncours.size().width + " X " + matPointContoursObjetsEncours.size().height + " \n\t\t:: Surperficie de contoursObjets " + Math.round(superficieContoursObjetEncours)); System.out.println(); //Si la superficie du contours est assez grande SUPERFICIEMINIMALE_CONTOURS, alors on l'ajoute dans la grande liste //On limine systmatiquement les petits contours if (superficieContoursObjetEncours >= SUPERFICIEMINIMALE_CONTOURS) { listPointsContoursObjets.addAll(contoursObjets.get(j).toList()); } } System.out.println(nomFichier + ":: listPointsContoursObjets :: liste des points P du contours : " + listPointsContoursObjets.toString()); System.out.println(); //Coversion de la liste points du contour listPointsContoursObjets en Matrice Mat matPointContoursObjets = Converters.vector_Point_to_Mat(listPointsContoursObjets); ///Calcul de la superficie du contours double superficieContoursObjet = Imgproc.contourArea(matPointContoursObjets); System.out.println(nomFichier + " :: matPointContoursObjets de contoursObjets " + i + " \n\t\t Taille de la matrice : " + matPointContoursObjets.size().width + " X " + matPointContoursObjets.size().height + " \n\t\t:: Surperficie de contoursObjets " + Math.round(superficieContoursObjet)); System.out.println("------------------------------------------------"); /// old ::: listContours.put(nomFichier+"MatriceHierarchie_ContoursObjets" + String.valueOf(i), contoursObjets); listContours.put(nomFichier + "MatriceHierarchie_ContoursObjets" + String.valueOf(i), matPointContoursObjets); Imgproc.drawContours(matriceImage, contoursObjets, i, new Scalar(255, 255, 255), 3); System.out.println("--RSUM CONTOURS ET HIERARCHIE CONTOURS----"); System.out.println(); System.out.println(nomFichier + " \n\t\t :: Taille de listHierarchies " + listHierarchies.size() + " \n\t\t :: Taille de listContours : " + listContours.size()); System.out.println(); System.out.println("==============================="); System.out.println("==============================="); } } //criture des donnes de l'image reccuprer "matriceImage" dans un BufferedImage byteImage = new byte[matriceImage.channels() * matriceImage.cols() * matriceImage.rows()]; matriceImage.get(0, 0, byteImage); ///System.out.println(nomFichier + " :: byteImage en cours : " + Arrays.toString(byteImage)); //criture des donnes de l'image encours "matriceImage" dans un BufferedImage imageEncours = new BufferedImage(matriceImage.cols(), matriceImage.rows(), elementBufferedImage); imageEncours.getRaster().setDataElements(0, 0, matriceImage.cols(), matriceImage.rows(), byteImage); n = nomFichier + "ImageSansBruitEnHSVobjetDetecte" + id + ".png"; ecritureDonneesImagesOpenCVdansUnFichierPNG(imageEncours, n, dossierDestinationImage); } public void comparaisonContours() { Set<String> clesContoursObjetsImageCapturee = listContoursObjetsImageCapturee.keySet(); if (clesContoursObjetsImageCapturee.size() > 0) { System.out.println(); System.out.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-"); double similariteMin = (double) 200; for (String cleContourImgCap : clesContoursObjetsImageCapturee) { System.out.println("\t -------------------------------------------"); //System.out.println("cleContourImgCap : " + cleContourImgCap ); //double similariteMin = (double)200; Mat matriceContoursObjetsImageCapturee = listContoursObjetsImageCapturee.get(cleContourImgCap); if (matriceContoursObjetsImageCapturee.size().width > 0 && matriceContoursObjetsImageCapturee.size().height > 0) { /*System.out.println("\t Taille de la matrice : " + matriceContoursObjetsImageCapturee.size().width +" X " + matriceContoursObjetsImageCapturee.size().height); System.out.println("\t Aire du contours : " + Imgproc.contourArea(matriceContoursObjetsImageCapturee)); System.out.println();*/ Set<String> clesContoursObjetsDossierTisirImage = listContoursObjetsDossierTisirImage.keySet(); if (clesContoursObjetsDossierTisirImage.size() > 0) { for (String cleContourImgDosTisir : clesContoursObjetsDossierTisirImage) { System.out.println("cleContourImgCap : " + cleContourImgCap); System.out.println( "\t Taille de la matrice : " + matriceContoursObjetsImageCapturee.size().width + " X " + matriceContoursObjetsImageCapturee.size().height); System.out.println("\t Aire du contours : " + Imgproc.contourArea(matriceContoursObjetsImageCapturee)); System.out.println("---"); System.out.println("cleContourImgDosTisir : " + cleContourImgDosTisir); Mat matriceContoursObjetsDossierTisirImage = listContoursObjetsDossierTisirImage .get(cleContourImgDosTisir); if (matriceContoursObjetsDossierTisirImage.size().width > 0 && matriceContoursObjetsDossierTisirImage.size().height > 0) { System.out.println("\t Taille de la matrice : " + matriceContoursObjetsImageCapturee.size().width + " X " + matriceContoursObjetsImageCapturee.size().height); System.out.println("\t Aire du contours : " + Imgproc.contourArea(matriceContoursObjetsDossierTisirImage)); //On cherche la similarit entre contoursObjetsImageCapturee et contoursObjetsDossierTisirImage double similariteDe2Matrices = Imgproc.matchShapes( matriceContoursObjetsImageCapturee, matriceContoursObjetsDossierTisirImage, Imgproc.CV_CONTOURS_MATCH_I3, 0); if (similariteMin > similariteDe2Matrices) { similariteMin = similariteDe2Matrices; } System.out.println("\t Similarit des matrices : " + cleContourImgCap + " et " + cleContourImgCap + " : \n\t" + similariteDe2Matrices); System.out.println("\t Similarit minimale : " + similariteMin); System.out.println("\t ----------------"); System.out.println(); } } } } } if (similariteMin <= 0.1) { resultat = "L'objet sur l'image capture est <br /> <em>RECYCLABLE</em> <br />"; } else { resultat = "L'objet sur l'image capture est <br /> <em>NON RECYCLABLE</em> <br />"; } } } /*criture des donnes d'images obtenues de diffrents traitements d'openCV sur disque*/ private void ecritureDonneesImagesOpenCVdansUnFichierPNG(BufferedImage imageEncours, String nomFichier, String nomDossierDestination) { File fichierImagePNG = new File(nomDossierDestination + nomFichier); try { ImageIO.write(imageEncours, "png", fichierImagePNG); } catch (IOException ex) { Logger.getLogger(ImageObjetForm.class.getName()).log(Level.SEVERE, null, ex); } } /*criture des donnes d'image capture de la camra sur le disque*/ //http://stackoverflow.com/questions/23979842/convert-base64-string-to-image private void ecrireDonneeImageCaptureeSurDisque(String originalData, String dossierimagescapturees) throws IOException { //On construit la chaine binaire de chaque image specimen String originalDataUtile = originalData.split(",")[1]; byte[] originalDataEnBytes = javax.xml.bind.DatatypeConverter.parseBase64Binary(originalDataUtile); System.out.printf("originalDataEnBytes : \n%s%d\n", Arrays.toString(originalDataEnBytes), originalDataEnBytes.length); try (ByteArrayInputStream byteArray = new ByteArrayInputStream(originalDataEnBytes)) { //On cre un buffered Image BufferedImage monImage = ImageIO.read(byteArray); File fDonneeImage; long id = System.currentTimeMillis(); fDonneeImage = new File(dossierimagescapturees + "donneeVideoTISIR" + id + ".png"); ImageIO.write(monImage, "png", fDonneeImage); } catch (IOException ioe) { System.out.printf("ByteArrayInputStream exception : %s\n", ioe.getLocalizedMessage()); } } /*Conversion d'un entier en tableau de byte*/ private byte[] entierEnOctets(int entier) { ByteBuffer tampon = ByteBuffer.allocate(4); tampon.putInt(entier); return tampon.array(); } /*Obtenir la liste des images specimens qui seront stockes dans le tableau files[]*/ private void listeFichiersD1Dossier(String dir) { file = new File(dir); files = file.listFiles(); if (files != null) { for (File file1 : files) { if (file1.isDirectory() == true) { System.out.printf("Dossier: %s\n", file1.getAbsolutePath()); } else { System.out.printf("Fichier: %s\n", file1.getName()); } } } } /*Valider la donnes de l'image reu de la page de recyclabilit*/ private void validationDonneImage(String paramDonneeImage) throws Exception { if (paramDonneeImage != null) { if (paramDonneeImage.length() < 1000) { throw new Exception("La donne constituant l'image doit au moins 1000 caractres numriques."); } } else { throw new Exception( "Merci de capturer une image de la vido bien avant de demander la vrification."); } } private int validationLargeurImage(String paramLargeurImage) throws Exception { int largeurImage = -1; if (paramLargeurImage != null) { try { largeurImage = Integer.parseInt(paramLargeurImage); if (largeurImage < 0) { throw new Exception( "La largeur de l'image capture doit tre un entier positif mais tel n'est pas le cas."); } } catch (NumberFormatException e) { throw new NumberFormatException(e.getMessage()); } } else { largeurImage = -1; throw new Exception("La largeur de l'image capture n'est pas un nombre entier."); } return largeurImage; } private int validationHauteurImage(String paramHauteurImage) throws Exception { int hauteurImage = -1; if (paramHauteurImage != null) { try { //hauteurImage = Integer.parseInt(paramHauteurImage.substring(0, (paramHauteurImage.indexOf(".")))); hauteurImage = Integer.parseInt(paramHauteurImage); if (hauteurImage < 0) { throw new Exception( "La hauteur de l'image capture doit tre un entier positif mais tel n'est pas le cas."); } } catch (NumberFormatException e) { throw new NumberFormatException(e.getMessage()); } } else { hauteurImage = -1; throw new Exception("La hauteur de l'image capture n'est pas un nombre entier."); } return hauteurImage; } /*Ajoute un message correspondant au champ spcifi la Map erreurs*/ private void setErreur(String champ, String message) { erreurs.put(champ, message); } /*Mthode utilitaire qui retourne null si un champ est vide, son contenu sinon */ private static String getValeurChamp(HttpServletRequest request, String nomChamp) { String valeur = request.getParameter(nomChamp); if (valeur == null || valeur.trim().length() == 0) { return null; } else { return valeur; } } }