Bonjour,
J'ai une image dans un zip et j'aimerais savoir s'il est possible de connaître ses dimensions, sans décompresser le zip ?
Merci d'avance pour votre aide.
Bonjour,
J'ai une image dans un zip et j'aimerais savoir s'il est possible de connaître ses dimensions, sans décompresser le zip ?
Merci d'avance pour votre aide.
Ma foi, il est possible de n'extraire que l'image. Et si c'est un format connu de Java, il est possible de n'extraire que jusqu'à l'a position des métadonnées de dimension, et s'arrêter là.
J'ai pas bien compris ta réponse, peux-tu être plus explicite ?
Merci d'avance.
Bonjour,
Cela signifie que si tu ne décompresses pas l'image d'une manière ou d'une autre, tu ne pourras jamais obtenir ses caractéristiques.
(Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)
N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
Ce que je voulais dire, c'est que :
- Si on ne s'intéresse qu'aux images, on n'est pas obligé de décompresser le reste. Notamment, on peut se contenter de décompresser un seul fichier à la fois. D'ailleurs Java ne fournit pas d'outils pour décompresser la totalité d'un .zip automatiquement.
- Si on ne s'occupe que d'images gérées par Java ImageIO, alors il peut lire leurs dimensions sans regarder tout le fichier, seulement le début. Il est donc possible de ne décompresser que le début de chaque fichier image, ce que l'on appelle les headers.
Bonjour,
@radovan aurais-tu trouvé une solution à ton problème? je rencontre le même problème et je ne sais pas vraiment comment m'y prendre. Je ne cherche pas forcément un bout de code mais plutôt une méthodologie.
Merci.
Ben, celle que j'ai donnée.
- Comme d'habitude avec les .zip, utiliser ZipInputStream.
- Comme tu ne t'intéresses qu'à un seul fichier, tu fais du getNextEntry() jusqu'à trouver le bon.
- Le ZipInputStream est donc un InputStream qui lit les données de l'image. Il est possible de l'utiliser comme entrée d'un ImageReader pour appeler getWidth() et getHeight() dessus.
- Une fois que tu as ces données, tu closes le ZipInputStream. Du coup, tu as seulement dézippé les headers du fichier image en question.
Merci!!! c'est ce que j'ai fait finalement, ça marche![]()
Slt
Pour info, pour connaitre la taille de n'importe quel fichier, il faut lire l’entête, car c'est la ou cette information est stockée.
Un fichier au format zip est un fichier compressé avec a algorithme dérivé de l'algo de Lempel-ziv, donc pour résumer, même si cette méthode excise, elle commencerait d'abord par extraire l’entête du fichier.
Bon courage.
... Ou alors parcourir les ZipEntry, comme je l'ai dit.
Mais là, la question n'était pas sur des tailles de fichiers, mais sur des dimensions d'images. C'est donc un peu plus compliqué. C'est les headers des fichiers images, qui nous intéressent. Et ce que j'ai indiqué marche pour ça.
Partager