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

2D Java Discussion :

Enregistrer une image PNG en 300 DPI


Sujet :

2D Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Points : 63
    Points
    63
    Par défaut Enregistrer une image PNG en 300 DPI
    Bonsoir,

    lorsque j'enregistre un BufferedImage en fichier png, la résolution utilisée est en 72 DPI.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    BufferedImage img = ...
    File f = new File("testImpression.png");
     
    try {
    	ImageIO.write(img, "png", f);
    } catch (IOException e) {
    	e.printStackTrace();
    }
    Comment puis-je spécifier que je souhaite que l'image soit enregistrée en 300 DPI ? En java, comment peux-t-on intervenir sur la résolution (en spécifiant le nombre de DPI ou de pixels par cm ...) ?

    Merci beaucoup,
    F.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 34
    Points : 55
    Points
    55
    Par défaut
    Une image a uniquement une largeur et une hauteur définie en pixel. Le nombre de point par pouce (DPI) n'a aucun sens pour l'image même si certains formats permettent de l'indiquer (TIFF en particulier). Cette information est alors sauvée dans les méta-données de l'image (Cf. ImageParam & getMetadata).

  3. #3
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Pour un complément d'infos le DPI est une mesure qui concerne les outils qui vont afficher l'image pas l'image en elle même. En effet le SPI dit combien de pixels un écran ou une imprimante va pouvoir afficher par pouce, l'image en elle même ne possède pas de DPI mais seulement un certain nombre de pixels point barre.

    Cf wikipedia (paragraphe DPI et photographie, et erreurs courrantes)
    ++

  4. #4
    Membre confirmé Avatar de ngpub
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 449
    Points : 505
    Points
    505
    Par défaut
    Citation Envoyé par Foub Voir le message
    Comment puis-je spécifier que je souhaite que l'image soit enregistrée en 300 DPI ? En java, comment peux-t-on intervenir sur la résolution (en spécifiant le nombre de DPI ou de pixels par cm ...) ?
    Perso je trouve ta question pertinente. Les remarques précédentes se placent uniquement d'un point de vu développeur (côté code), prétendre savoir ce qui est utile ou pas dans un fichier sans connaitre la finalité, est faire une hypothèse sur l'inconnu. Et là on est en pleine contradiction avec le principe du Rasoir d'Occam qui est un des principes de base du développement.

    Voici une solution :
    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
    BufferedImage image = ...;
     
    /* création d'un ImageWriter */
    ImageTypeSpecifier type = ImageTypeSpecifier.createFromRenderedImage(image);
    Iterator<ImageWriter> iter = ImageIO.getImageWriters(type, "png");
    ImageWriter writer = null;
    if(iter.hasNext()) {
    	writer = iter.next();
    } else {
    	throw new Exception("ImageWriter not found.");
    }
     
    /* création d'un jeu de meta-données */
    IIOMetadata metadata = writer.getDefaultImageMetadata(type, null);
     
    /* modification des meta-données via une sutcture DOM */
    IIOMetadataNode root = (IIOMetadataNode)metadata.getAsTree("javax_imageio_png_1.0");
    IIOMetadataNode node;
    NodeList nodeList = root.getElementsByTagName("pHYs");
    if(nodeList.getLength() > 0) {
    	node = (IIOMetadataNode)nodeList.item(0);
    } else {
    	node = (IIOMetadataNode)root.appendChild(new IIOMetadataNode("pHYs"));
    }
    node.setAttribute("pixelsPerUnitXAxis", "11811"); // résolution en largeur en pixels par mètre.
    node.setAttribute("pixelsPerUnitYAxis", "11811"); // résolution en hauteur en pixels par mètre.
    node.setAttribute("unitSpecifier", "meter");      // unité de résolution toujours en mètre.
     
    metadata.setFromTree("javax_imageio_png_1.0", root);
     
    /* Ecriture du fichier */
    try {
    	writer.setOutput(ImageIO.createImageOutputStream(new File(...)));
    	writer.write(new IIOImage(image, null, metadata));
    } finally {
    	writer.dispose();
    }

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 118
    Points : 63
    Points
    63
    Par défaut
    Merci pour vos réponses....

    Mais, j'ai l'impression que cela ne marche pas.
    J'ai enregistré mon image PNG en rajoutant les informations dans les méta-données de l'image pour indiquer une résolution de 300 DPI.

    Pourtant, lorsque j'ouvre cette image avec Photoshop, menu Image ---> Taille de l'image, mon image a une résolution de 72 pixels/pouce.

    J'ai tenté de faire la manipulation suivante :
    • je force la résolution a 300 pixels/pouce toujours dans la fenetre qui est apparu en faisant menu Image ---> Taille de l'image,
    • je l'enregistre sous un nouveau nom,
    • je ferme Photoshop,
    • je réouvre cette nouvelle image,
    • menu Image ---> Taille de l'image.


    Je constate que ma nouvelle image conserve bien sa résolution, à savoir 300 DPI. Pourquoi ne puis-je pas faire pareil en Java ?

    Merci,
    F.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 34
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par Foub Voir le message
    Je constate que ma nouvelle image conserve bien sa résolution, à savoir 300 DPI. Pourquoi ne puis-je pas faire pareil en Java ?
    Si tu connais la méta-donnée DPI utilisée par Photoshop, cela fonctionnera en Java de la même manière.

Discussions similaires

  1. ENREGISTRER UNE IMAGE OU UN FICHIER .DOC
    Par manudja dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 03/08/2005, 13h32
  2. enregistrer une image
    Par meli0207 dans le forum MFC
    Réponses: 35
    Dernier message: 12/07/2005, 09h00
  3. [GLScene] Comment enregistrer une image au format TGA
    Par Invité dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 27/05/2005, 15h12
  4. Enregistrer une image
    Par N@sH dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 04/05/2005, 10h07
  5. enregistrer une image et un identifiant
    Par dosach dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 18/03/2004, 17h18

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