Je suis en train de faire un programme pour compresser le fichier à tar.gz:tar.gz compress ne fonctionne pas pour le fichier GIF
Voici le code:
import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.zip.GZIPOutputStream;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;
public class Compress {
public static void main(String[] args) {
BufferedInputStream input = null;
try {
input = new BufferedInputStream(new FileInputStream(new File("input_filename.filetype")));
TarArchiveOutputStream out = null;
try {
out = new TarArchiveOutputStream(new GZIPOutputStream(new BufferedOutputStream(new FileOutputStream("output_filename.tar.gz"))));
out.putArchiveEntry(new TarArchiveEntry(new File("input_filename.filetype")));
int count;
byte data[] = new byte[input.available()];
while ((count = input.read(data)) != -1) {
out.write(data, 0, count);
}
input.close();
} catch (IOException ex) {
Logger.getLogger(Compress.class.getName()).log(Level.SEVERE, null, ex);
} finally {
if (out != null) {
try {
out.closeArchiveEntry();
out.close();
} catch (IOException ex) {
Logger.getLogger(Compress.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
} catch (FileNotFoundException ex) {
Logger.getLogger(Compress.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
input.close();
} catch (IOException ex) {
Logger.getLogger(Compress.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
Je suis en utilisant Apache Commons Compression comme bibliothèque.
je test avec 2 conditions:
- Compress GIF
- Compress Fichier PDF
Et je compare compresser en utilisant PeaZip, voici le résultat:
Si le fichier d'entrée est GIF la taille de l'augmentation de fichier de compression, même si nous en utilisant PeaZip. Mais pour l'autre fichier, cela fonctionne pour le processus de compression.
Quelqu'un peut-il expliquer ce qui se passe avec cela? Y a-t-il un problème avec mon code?
Merci pour votre aide ...
Bienvenue chez SO. +1 pour une question bien écrite, bien documentée. Je devrais probablement aussi -1 pour ne pas googler ceci, car c'est une caractéristique bien connue de la compression qui ne fonctionne qu'une seule fois. Comme le soulignent toutes les réponses, compresser quelque chose de déjà compressé le rendra probablement plus grand et non plus petit. Mais je vais vous donner le bénéfice du doute sur le -1 ;-) –
Y at-il une suggestion que dois-je faire si je veux réduire la taille du fichier GIF sans réduire la dimension? Juste un mot clé, il serait utile pour moi :) – Crazenezz
Comme toutes les réponses ont dit, vous ne pouvez pas le faire. Les fichiers GIF sont déjà aussi compressés qu'ils peuvent l'être. Vous pourriez trouver un algorithme de compression exotique qui peut réduire de 1%, mais c'est à peu près tout ce que vous obtiendrez. Ça ne vaut pas l'effort. Si vous voulez plus de compression, vous devez rechercher JPEG avec des paramètres de qualité médiocre. –