IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Web en Java Discussion :

Redimenssionement d'image, problèmes avec les jpg


Sujet :

Développement Web en Java

  1. #1
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 015
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut Redimenssionement d'image, problèmes avec les jpg
    Salut je fais un site ou j'upload des photos, puis je crées 2 miniature (1 largeur fixe et une hauteur fixe), ça marche impec avec les png et gif, mais les jpg ne passe pas, sans avoir d'erreur le fichier redimensionné jpg pèse 0k et si je l'ouvre avec spot ça met :
    Erreur d'interprétation du fichier d'image JPEG (Improper call to JPEG library in state 200)
    Voici mes sources :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
                                  try {
                                        Img img=new Img();
                                        img.getSize(file);
                                        String fileNameMini1=Datas.uploadDir+"photos/mini1_"+idPhoto+extension;
                                        String fileNameMini2=Datas.uploadDir+"photos/mini2_"+idPhoto+extension;
                                        File fileMini1=new File(fileNameMini1);
                                        File fileMini2=new File(fileNameMini2);
                                        img.resizeWidth(file, fileMini1, Datas.MINIAT1WIDTH);
                                        img.resizeHeight(file, fileMini2, Datas.MINIAT2HEIGHT);
                                        if(img.width>Datas.MAXWIDTHPHOTOS)
                                            img.resizeWidth(file, file, Datas.MAXWIDTHPHOTOS);
                                        img.getSize(file);
                                        if(img.height>Datas.MAXHEIGHTPHOTOS)
                                            img.resizeHeight(file, file, Datas.MAXHEIGHTPHOTOS);
                            } catch (Exception ex) {
                                Logger.getLogger(MembrePhotos.class.getName()).log(Level.SEVERE, null, ex);
                                //int i=1/0;
                                    query="DELETE FROM table_photos WHERE id=?";
                                    prepare=getConnect().prepareStatement(query);
                                    prepare.setInt(1, idPhoto);
                                    prepare.executeUpdate();
                                    this.setErrorMsg(textes.inscErr23);
                            }
    et ma classe Img :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    package classes;
     
    import java.awt.Graphics2D;
    import java.awt.RenderingHints;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.imageio.ImageIO;
     
    /**
     *
     * @author pj
     */
    public class Img {
        BufferedImage source;
        BufferedImage destination;
        File sourceFile;
        File destinationFile;
        int width;
        int height;
        String extension;
     
        public boolean resizeWidth(File sourceFile, File destinationFile, int width) {
            try {
                this.sourceFile = sourceFile;
                this.destinationFile=destinationFile;
                this.extension=(sourceFile.getName().substring(sourceFile.getName().lastIndexOf("."))).toLowerCase();
                this.extension=this.extension.substring(1);
                this.source = ImageIO.read(this.sourceFile);
                this.width = width;
                int height0 = this.source.getHeight();
                int width0 = this.source.getWidth();
                this.height = (int) (((double)height0*(double)this.width)/((double)width0));
                this.destination = new BufferedImage(this.width, this.height, BufferedImage.TYPE_INT_ARGB);
                Graphics2D g = this.destination.createGraphics();
                g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
                g.drawImage(this.source, 0, 0, this.width, this.height, null);
                g.dispose();
                ImageIO.write(this.destination, this.extension, this.destinationFile);
                return true;
            } catch (IOException ex) {
                Logger.getLogger(Img.class.getName()).log(Level.SEVERE, null, ex);
                return false;
            }
       }
        public boolean resizeHeight(File sourceFile, File destinationFile, int height) {
            try {
                this.sourceFile = sourceFile;
                this.destinationFile=destinationFile;
                this.extension=(sourceFile.getName().substring(sourceFile.getName().lastIndexOf("."))).toLowerCase();
                this.extension=this.extension.substring(1);
                this.source = ImageIO.read(this.sourceFile);
                this.height = height;
                int height0 = this.source.getHeight();
                int width0 = this.source.getWidth();
                this.width = (int) (((double)width0*(double)this.height)/((double)height0));
                this.destination = new BufferedImage(this.width, this.height, BufferedImage.TYPE_INT_ARGB);
                Graphics2D g = this.destination.createGraphics();
                g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
                g.drawImage(this.source, 0, 0, this.width, this.height, null);
                g.dispose();
                ImageIO.write(this.destination, this.extension, this.destinationFile);
                return true;
            } catch (IOException ex) {
                Logger.getLogger(Img.class.getName()).log(Level.SEVERE, null, ex);
                return false;
            }
       }
       public boolean getSize(File sourceFile) {
            try {
                this.sourceFile = sourceFile;
                this.source = ImageIO.read(this.sourceFile);
                this.width=this.source.getWidth();
                this.height=this.source.getHeight();
                return true;
            } catch (IOException ex) {
                Logger.getLogger(Img.class.getName()).log(Level.SEVERE, null, ex);
                return false;
            }
     
       }
    }
    merci pour votre aide !

  2. #2
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    salut.
    à vue de nez, je dirais que l'erreur est dans cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.destination = new BufferedImage(this.width, this.height, BufferedImage.TYPE_INT_ARGB);
    Comme le format JPEG ne supporte pas la transparence faut utiliser le type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BufferedImage.TYPE_INT_RGB

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ImageIO.write(this.destination, this.extension, this.destinationFile);
    ImageIO.write prend le "nom du format" et non pas l'extension de fichier, ce qui est différent. Pour du jpg, par exemple, le nom de format est "JPEG".

    Tu peux avoir la liste des format supportés par ta java en faisant

    String[] formats = ImageReaderWriterSpi.getFormatNames()

  4. #4
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 015
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut
    Oui en effet il faut utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BufferedImage.TYPE_INT_RGB
    et j'ai aussi changé le format
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [FPDF] problème avec les images dans un tableau dynamique
    Par GADSN dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 08/04/2009, 11h11
  2. [Traitement d'image] problème avec les boutons animés
    Par robmoto dans le forum Webdesign & Ergonomie
    Réponses: 9
    Dernier message: 17/08/2007, 13h36
  3. Réponses: 6
    Dernier message: 17/11/2005, 14h39
  4. TreeView - Problème avec les images
    Par LoicH dans le forum C++Builder
    Réponses: 4
    Dernier message: 21/06/2005, 18h50
  5. Problème avec les fichiers .JPG
    Par cprogil dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2003, 15h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo