Código de compresión de imágenes Java
Copie el código de código de la siguiente manera:
paquete com.img;
importar java.awt.Imagen;
importar java.awt.image.BufferedImage;
importar java.io.File;
importar java.io.FileOutputStream;
importar java.io.IOException;
importar javax.imageio.ImageIO;
importar com.sun.image.codec.jpeg.JPEGCodec;
importar com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
*
* @author Coca-Cola con azúcar
*/
clase pública CompressPicDemo {
Archivo privado archivo = nulo // objeto de archivo
cadena privada inputDir //Ingresar ruta del mapa
private String outputDir // Ruta del gráfico de salida
cadena privada inputFileName // Nombre del archivo de imagen de entrada;
cadena privada nombreArchivoSalida // Nombre del archivo de imagen de salida;
private int outputWidth = 100 //Ancho de imagen de salida predeterminado
private int outputHeight = 100 //Altura de imagen de salida predeterminada
proporción booleana privada = verdadero; // Si escalar la marca proporcionalmente (el valor predeterminado es la escala proporcional)
public CompressPicDemo() { //Inicializar variables
DirEntrada = "";
DirSalida = "";
inputFileName = "";
nombreArchivoSalida = "";
ancho de salida = 100;
Altura de salida = 100;
}
setInputDir público vacío (String inputDir) {
this.inputDir = inputDir;
}
setOutputDir público vacío (String OutputDir) {
this.outputDir = salidaDir;
}
setInputFileName público vacío (String inputFileName) {
this.inputFileName = inputFileName;
}
public void setOutputFileName (String salidaFileName) {
this.outputFileName = salidaFileName;
}
setOutputWidth público vacío (int ancho de salida) {
this.outputWidth = ancho de salida;
}
setOutputHeight público vacío (int alturaSalida) {
this.outputHeight = salidaHeight;
}
public void setWidthAndHeight(int ancho, int alto) {
this.outputWidth = ancho;
this.outputHeight = altura;
}
/*
* Obtener tamaño de imagen
* Pasar el parámetro Ruta de cadena: ruta de la imagen
*/
getPicSize público largo (ruta de cadena) {
archivo = nuevo archivo (ruta);
devolver archivo.length();
}
//Procesamiento de imágenes
cadena pública comprimirPic() {
intentar {
//Obtener el archivo fuente
archivo = nuevo archivo (inputDir + inputFileName);
si (!archivo.existe()) {
devolver "";
}
Imagen img = ImageIO.read(archivo);
// Determinar si el formato de la imagen es correcto
si (img.getWidth(nulo) == -1) {
System.out.println ("no puedo leer, ¡reinténtalo!" + "<BR>");
devolver "no";
} demás {
int nuevoAncho; int nuevoAlto;
// Determinar si es una escala proporcional
if (esta.proporción == verdadero) {
// Calcula el ancho y el alto de la imagen de salida para una escala proporcional
tasa doble1 = ((doble) img.getWidth(null)) / (doble) anchodesalida + 0.1;
tasa doble2 = ((doble) img.getHeight(null)) / (doble) alturasalida + 0.1;
// Realizar control de zoom basado en la relación de zoom mayor
tasa doble = tasa1 > tasa2 ?
newWidth = (int) (((doble) img.getWidth(null)) / tasa);
newHeight = (int) (((doble) img.getHeight(null)) / tasa);
} demás {
newWidth = img.getWidth(null); // Ancho de la imagen de salida
newHeight = img.getHeight(null); // Altura de la imagen de salida
}
Etiqueta BufferedImage = nueva BufferedImage((int) newWidth, (int) newHeight, BufferedImage.TYPE_INT_RGB);
/*
* El algoritmo de miniaturas Image.SCALE_SMOOTH genera suavidad en las imágenes en miniatura
* La prioridad es mayor que la velocidad. La calidad de las imágenes generadas es mejor pero la velocidad es lenta.
*/
tag.getGraphics().drawImage(img.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), 0, 0, null);
FileOutputStream out = new FileOutputStream(outputDir + outputFileName);
// JPEGImageEncoder se puede aplicar a la conversión de otros tipos de imágenes
Codificador JPEGImageEncoder = JPEGCodec.createJPEGEncoder(salida);
codificador.codificar(etiqueta);
fuera.cerrar();
}
} captura (IOException ex) {
ex.printStackTrace();
}
devolver "bien";
}
cadena pública compressPic (cadena directorio de entrada, cadena directorio de salida, cadena nombre de archivo de entrada, cadena nombre de archivo de salida) {
//Ingresar ruta de la imagen
this.inputDir = inputDir;
//Ruta del gráfico de salida
this.outputDir = salidaDir;
//Ingrese el nombre del archivo de imagen
this.inputFileName = inputFileName;
// Nombre del archivo de imagen de salida
this.outputFileName = salidaFileName;
devolver imagen comprimida();
}
public String compressPic(String inputDir, String outputDir, String inputFileName, String outputFileName, int ancho, int alto, booleano gp) {
//Ingresar ruta de la imagen
this.inputDir = inputDir;
//Ruta del gráfico de salida
this.outputDir = salidaDir;
//Ingrese el nombre del archivo de imagen
this.inputFileName = inputFileName;
// Nombre del archivo de imagen de salida
this.outputFileName = salidaFileName;
//Establece el largo y ancho de la imagen
setWidthAndHeight(ancho, alto);
// Si es una marca de escala proporcional
esta.proporción = gp;
devolver imagen comprimida();
}
// prueba principal
// compressPic (ruta de imagen grande, generar ruta de imagen pequeña, nombre de archivo de imagen grande, generar nombre de texto de imagen pequeña, generar ancho de imagen pequeño, generar altura de imagen pequeña, si escalar proporcionalmente (el valor predeterminado es verdadero))
público estático vacío principal (Cadena [] arg) {
CompressPicDemo mypic = nuevo CompressPicDemo();
System.out.println("Ingrese el tamaño de la imagen: " + mypic.getPicSize("e://1.jpg")/1024 + "KB");
mypic.compressPic("e://", "e://prueba//", "1.jpg", "r1.jpg", 120, 120, falso);
}
}