Code de compression d'images Java
Copiez le code comme suit :
paquet com.img;
importer java.awt.Image ;
importer java.awt.image.BufferedImage ;
importer java.io.File ;
importer java.io.FileOutputStream ;
importer java.io.IOException ;
importer javax.imageio.ImageIO ;
importer com.sun.image.codec.jpeg.JPEGCodec ;
importer com.sun.image.codec.jpeg.JPEGImageEncoder ;
/**
*
* @author Coca avec sucre
*/
classe publique CompressPicDemo {
fichier privé fichier = null ; // objet fichier
private String inputDir ; //Chemin de la carte d'entrée
private String OutputDir ; // Chemin du graphique de sortie
private String inputFileName ; // Nom du fichier image d'entrée
private String OutputFileName ; // Nom du fichier image de sortie
private int outputWidth = 100; //Largeur de l'image de sortie par défaut
private int outputHeight = 100 ; //Hauteur de l'image de sortie par défaut
private boolean proportion = true ; // Si la marque doit être mise à l'échelle proportionnellement (la valeur par défaut est la mise à l'échelle proportionnelle)
public CompressPicDemo() { //Initialiser les variables
inputDir = "";
Répsortie = "" ;
nomFichierentrée = "" ;
nomFichiersortie = "" ;
largeur de sortie = 100 ;
hauteur de sortie = 100 ;
}
public void setInputDir (String inputDir) {
this.inputDir = inputDir;
}
public void setOutputDir (String outputDir) {
this.outputDir = outputDir;
}
public void setInputFileName (String inputFileName) {
this.inputFileName = inputFileName ;
}
public void setOutputFileName (String outputFileName) {
this.outputFileName = outputFileName ;
}
public void setOutputWidth (int sortieWidth) {
this.outputWidth = sortieWidth ;
}
public void setOutputHeight (int sortieHeight) {
this.outputHeight = outputHeight ;
}
public void setWidthAndHeight (int largeur, int hauteur) {
this.outputWidth = largeur ;
this.outputHeight = hauteur ;
}
/*
* Obtenir la taille de l'image
* Passer en paramètre String path : chemin de l'image
*/
public long getPicSize (chemin de la chaîne) {
fichier = nouveau fichier (chemin);
return file.length();
}
//Traitement d'images
chaîne publique compressPic() {
essayer {
//Récupère le fichier source
fichier = nouveau fichier (inputDir + inputFileName);
si (!file.exists()) {
retour "";
}
Image img = ImageIO.read (fichier);
// Détermine si le format de l'image est correct
if (img.getWidth(null) == -1) {
System.out.println(" impossible de lire, réessayez ! " + "<BR>");
renvoie « non » ;
} autre {
int nouvelleLargeur; int nouvelleHauteur ;
// Détermine s'il s'agit d'une mise à l'échelle proportionnelle
si (this.proportion == vrai) {
// Calcule la largeur et la hauteur de l'image de sortie pour une mise à l'échelle proportionnelle
double taux1 = ((double) img.getWidth(null)) / (double) sortieLargeur + 0,1 ;
double rate2 = ((double) img.getHeight(null)) / (double) outputHeight + 0,1 ;
// Effectue un contrôle du zoom basé sur le taux de zoom plus grand
taux double = taux1 > taux2 ? taux1 : taux2;
newWidth = (int) (((double) img.getWidth(null)) / taux);
newHeight = (int) (((double) img.getHeight(null)) / taux);
} autre {
newWidth = img.getWidth(null); // Largeur de l'image de sortie
newHeight = img.getHeight(null); // Hauteur de l'image de sortie
}
Balise BufferedImage = new BufferedImage((int) newWidth, (int) newHeight, BufferedImage.TYPE_INT_RGB);
/*
* L'algorithme de vignettes Image.SCALE_SMOOTH génère une fluidité des images miniatures
* La priorité est supérieure à la vitesse. La qualité des images générées est meilleure mais la vitesse est lente.
*/
tag.getGraphics().drawImage(img.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), 0, 0, null);
FileOutputStream out = new FileOutputStream(outputDir + outputFileName);
// JPEGImageEncoder peut être appliqué à la conversion d'autres types d'images
Encodeur JPEGImageEncoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(balise);
out.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
renvoie "ok" ;
}
public String compressPic (String inputDir, String outputDir, String inputFileName, String outputFileName) {
//Chemin de l'image d'entrée
this.inputDir = inputDir;
//Chemin du graphique de sortie
this.outputDir = outputDir;
// Entrez le nom du fichier image
this.inputFileName = inputFileName ;
// Nom du fichier image de sortie
this.outputFileName = outputFileName ;
return compressPic();
}
public String compressPic (String inputDir, String outputDir, String inputFileName, String outputFileName, int width, int height, boolean gp) {
//Chemin de l'image d'entrée
this.inputDir = inputDir;
//Chemin du graphique de sortie
this.outputDir = outputDir;
// Entrez le nom du fichier image
this.inputFileName = inputFileName ;
// Nom du fichier image de sortie
this.outputFileName = outputFileName ;
//Définit la longueur et la largeur de l'image
setWidthAndHeight(largeur, hauteur);
// S'il s'agit d'une marque d'échelle proportionnelle
this.proportion = gp;
return compressPic();
}
// essai principal
// compressPic (chemin de grande image, générer un chemin de petite image, nom de fichier de grande image, générer un nom de texte de petite image, générer une petite largeur d'image, générer une petite hauteur d'image, s'il faut mettre à l'échelle proportionnellement (la valeur par défaut est vraie))
public static void main(String[] arg) {
CompressPicDemo mypic = new CompressPicDemo();
System.out.println("Taille de l'image d'entrée : " + mypic.getPicSize("e://1.jpg")/1024 + "KB");
mypic.compressPic("e://", "e://test//", "1.jpg", "r1.jpg", 120, 120, false);
}
}