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

AWT/Swing Java Discussion :

Obtenir rapidement une preview d'un jpeg


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Par défaut Obtenir rapidement une preview d'un jpeg
    Bonjour à tous,

    ma question est un peu technique, je dois charger une grosse liste de jpeg pour les visualiser sous forme de petites vignettes. Et bon c'est un peu long de charger chaque image entièrement puis de la redimensionner à la taille de la vignette.

    Donc ma question était: existe-t-il une possibilité d'éviter le chargement complet de l'image, c'est-à-dire créer directement la vignette à la lecture du fichier, en ne le lisant que partiellement? Il me semble que le format jpeg le permet (ce que font des softs comme ACDsee pour afficher rapidemment une liste d'images).

    Merci d'avance!

  2. #2
    Membre expérimenté Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Par défaut
    Si les données sont au format JPEG, les thumbnails sont (peuvent être?) inclus dans les métadonnées du fichier et extrait grâce à la classe :
    IIOImage


  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Par défaut
    Citation Envoyé par dazz_x
    Si les données sont au format JPEG, les thumbnails sont (peuvent être?) inclus dans les métadonnées du fichier et extrait grâce à la classe :
    IIOImage

    Hum... en fait je ne savais pas qu'une image Jpeg pouvait embarquer des thumbnails... en tout cas pas celles que j'utilise dans ce cas précis

    En tout cas merci de m'avoir éguiller sur IIOImage, même si la solution que j'ai trouvée ne s'en sert pas. Je passe par un ImageReader paramétré par un ImageReaderParam. Voici la source si ça peut servir à quelqu'un:

    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
    /**
     * Crée une vignette depuis un fichier JPEG sans lire l'image complétement
     * 
     * @param fileName Le fichier image sur le disque (path complet)
     * @param thumbnailSize La taille en pixel de la vignette (sera affecté au côté le plus grand)
     * 
     * @return Le BufferedImage de la vignette
     * 
     * @throws Exception Pleins à gérer:)
     */
    public static BufferedImage readThumbnailFromJPEG(String fileName, int thumbnailSize) throws Exception {
     
    	int originalWidth = 0;
    	int originalHeight = 0;
    	int ThumbWidth = 0;
    	int ThumbHeight = 0;
     
    	// Création de l'image reader à partir du fichier
    	File file = new File(fileName);
    	JPEGImageReader imageReader = new JPEGImageReader(null);
    	imageReader.setInput(new FileImageInputStream(file));
     
    	// Récupération de la taille de l'image
    	originalWidth = imageReader.getWidth(0);
    	originalHeight = imageReader.getHeight(0);
     
    	// Calcul de la taille de la vignette en gardant le ratio original
    	if(originalWidth > originalHeight) {
     
    		ThumbHeight = (thumbnailSize*originalHeight) / originalWidth;
    		ThumbWidth = thumbnailSize;
    	}
    	else {
     
    		ThumbWidth = (thumbnailSize*originalWidth) / originalHeight;
    		ThumbHeight = thumbnailSize;
    	}
     
    	// Création et paramétrage du ImageReadParam qui va lire seulement les pixels nécessaires dans l'image
    	ImageReadParam imageParam = new ImageReadParam();
    	imageParam.setSourceSubsampling(originalWidth/ThumbWidth,originalHeight/ThumbHeight,0,0);
     
    	// Lecture de la vignette et retour du BufferedImage en résultant
    	return imageReader.read(0, imageParam);
    }
    Dans mon cas précis je gagne 50% de vitesse avec cette méthode plutôt que lire le JPEG entier puis le redimensioner. Cela doit dépendre aussi de la taille de l'image, de la vitesse du disque, etc.

    Si quelqu'un voit une erreur ou un truc optimisable dans cette méthode, je suis prenneur (je ne suis pas très habitué à la programmation Java). A ce propos existe-il des trucs genre "option de compilations" pour accélérer une application Java?

    Reste que la méthode la plus rapide serait d'appeler un .exe fait en C++ pour créer les vignettes. A voir. (Evidemment dans le cadre d'une application).

  4. #4
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Pour accélérer ce genre de traitements, je pense que java -server tonAppli ferait l'affaire...

Discussions similaires

  1. Comment recevoir rapidement une réponse à votre question ?
    Par Community Management dans le forum Windows
    Réponses: 3
    Dernier message: 17/08/2014, 02h28
  2. [QuickReport] Problème d'impression d'une Preview
    Par sillycoder dans le forum Composants VCL
    Réponses: 1
    Dernier message: 03/10/2005, 17h47
  3. [Qreport] Comment avoir une preview personnalisée ?
    Par jcharles dans le forum Composants VCL
    Réponses: 3
    Dernier message: 06/05/2005, 09h14
  4. Compression d'une série d'images jpeg
    Par Tchello dans le forum Langage
    Réponses: 3
    Dernier message: 31/08/2003, 19h59
  5. [VBA Excel] Effacer rapidement une feuille
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/10/2002, 13h12

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