El ejemplo de este artículo describe el método para crear miniaturas y escalar proporciones de imágenes en Java. Compártelo con todos para tu referencia. El método de implementación específico es el siguiente:
Esta instancia admite escalar el ancho y el alto de la imagen al ancho y alto especificados y guardarla en el directorio especificado. La relación de reducción de la imagen se calcula en función del tamaño del objeto de destino y el tamaño estándar (especificado). Se puede configurar la calidad de escala y la calidad de escala de la imagen se puede configurar de acuerdo con la escala especificada de la imagen en ancho y alto.
El código específico es el siguiente:
Copie el código de código de la siguiente manera:
paquete com.hoo.util;
importar java.awt.Imagen;
importar java.awt.image.BufferedImage;
importar java.io.File;
importar java.io.FileOutputStream;
importar java.io.IOException;
importar java.net.MalformedURLException;
importar java.net.URL;
importar javax.imageio.ImageIO;
importar com.sun.image.codec.jpeg.ImageFormatException;
importar com.sun.image.codec.jpeg.JPEGCodec;
importar com.sun.image.codec.jpeg.JPEGEncodeParam;
importar com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
* <b>función:</b> clase de herramienta de zoom de imagen, crear miniaturas, estirar proporciones de imagen
*@autorhoojo
* @createDate 2012-2-3 10:08:47 a. m.
* @archivo ScaleImageUtils.java
* @paquete com.hoo.util
* @versión 1.0
*/
clase abstracta pública ScaleImageUtils {
flotador final estático privado DEFAULT_SCALE_QUALITY = 1f;
Cadena final estática privada DEFAULT_IMAGE_FORMAT = ".jpg" // Formato de archivo de imagen
Cadena final estática privada DEFAULT_FILE_PATH = "C:/temp-";
/**
* <b>función:</b> Establecer la clase de enumeración de calidad de compresión de imágenes;
* Algunas pautas: 0,75 calidad alta, 0,5 calidad media, 0,25 calidad baja
*@autorhoojo
* @createDate 2012-2-7 11:31:45 a. m.
* @archivo ScaleImageUtils.java
* @paquete com.hoo.util
* @proyecto JQueryMobile
* @versión 1.0
*/
enumeración pública Calidad de imagen {
máximo (1,0 f), alto (0,75 f), medio (0,5 f), bajo (0,25 f);
calidad flotador privado;
flotador público getQuality() {
devolver esta calidad;
}
ImageQuality (calidad flotante) {
this.calidad = calidad;
}
}
imagen estática privada;
/**
* <b>función:</b> Calcula la relación de reducción de la imagen según el tamaño del objeto de destino y el tamaño estándar (especificado)
*@autorhoojo
* @createDate 2012-2-6 04:41:48 pm
* @param targetWidth El ancho del objetivo
* @param targetHeight la altura del objetivo
* @param standardWidth ancho estándar (especificado)
* @param standardHeight altura estándar (especificada)
* @return la proporción adecuada más pequeña
*/
getScaling doble estático público (doble ancho de objetivo, doble altura de objetivo, doble ancho de estándar, doble altura de estándar) {
doble anchoEscalado = 0d;
doble alturaEscalado = 0d;
if (ancho objetivo > ancho estándar) {
widthScaling = ancho estándar / (ancho objetivo * 1.00d);
} demás {
anchoEscala = 1d;
}
if (altura objetivo > altura estándar) {
escala de altura = altura estándar / (altura objetivo * 1,00 d);
} demás {
Escala de altura = 1d;
}
return Math.min(escaladoancho,escaladoalto);
}
/**
* <b>Función:</b> Escale el ancho y el alto de la imagen al ancho y alto especificados y guárdelo en el directorio savePath.
*@autorhoojo
* @createDate 2012-2-6 04:54:35 p.m.
* @param ancho el ancho de escala
* @param altura zoom altura
* @param savePath directorio de guardado
* @param targetImage La imagen de destino a ampliar
* @return Ruta y nombre para guardar la imagen
* @throws ImageFormatException
* @throwsIOException
*/
cambio de tamaño de cadena estática pública (ancho int, altura int, ruta de guardado de cadena, imagen objetivo de imagen) arroja ImageFormatException, IOException {
ancho = Math.max(ancho, 1);
altura = Math.max(altura, 1);
Imagen BufferedImage = nueva Imagen Buffered (ancho, alto, Imagen Buffered.TYPE_INT_RGB);
image.getGraphics().drawImage(targetImage, 0, 0, ancho, alto, nulo);
if (savePath == null || "".equals(savePath)) {
savePath = DEFAULT_FILE_PATH + System.currentTimeMillis() + DEFAULT_IMAGE_FORMAT;
}
FileOutputStream fos = nuevo FileOutputStream(nuevo archivo(savePath));
Codificador JPEGImageEncoder = JPEGCodec.createJPEGEncoder(fos);
codificador.codificar(imagen);
imagen.flush();
fos.flush();
fos.cerrar();
devolver rutaguardada;
}
/**
* <b>Función:</b> Puede configurar la calidad de escala de la imagen y escalar la imagen de acuerdo con el ancho y alto especificados.
*@autorhoojo
* @createDate 2012-2-7 11:01:27 a. m.
* @param ancho el ancho de escala
* @param altura zoom altura
* @param calidad Calidad de compresión de imagen, el valor máximo es 1, utilice el valor de enumeración: {@link ImageQuality}
* Algunas pautas: 0,75 calidad alta, 0,5 calidad media, 0,25 calidad baja
* @param savePath directorio de guardado
* @param targetImage La imagen de destino a ampliar
* @return Ruta y nombre para guardar la imagen
* @throws ImageFormatException
* @throwsIOException
*/
cambio de tamaño de cadena estática pública (ancho int, altura int, calidad flotante, ruta de guardado de cadena, imagen objetivo de imagen) arroja ImageFormatException, IOException {
ancho = Math.max(ancho, 1);
altura = Math.max(altura, 1);
Imagen BufferedImage = nueva Imagen Buffered (ancho, alto, Imagen Buffered.TYPE_INT_RGB);
image.getGraphics().drawImage(targetImage, 0, 0, ancho, alto, nulo);
if (savePath == null || "".equals(savePath)) {
savePath = DEFAULT_FILE_PATH + System.currentTimeMillis() + DEFAULT_IMAGE_FORMAT;
}
FileOutputStream fos = nuevo FileOutputStream(nuevo archivo(savePath));
Codificador JPEGImageEncoder = JPEGCodec.createJPEGEncoder(fos);
JPEGEncodeParam encodeParam = JPEGCodec.getDefaultJPEGEncodeParam(imagen);
if (calidad == nulo || calidad <= 0) {
calidad = DEFAULT_SCALE_QUALITY;
}
/**Establecer calidad de compresión de imagen*/
encodeParam.setQuality(calidad, verdadero);
codificador.encode(imagen, encodeParam);
imagen.flush();
fos.flush();
fos.cerrar();
devolver rutaguardada;
}
/**
* <b>Función:</b> Calcula el tamaño apropiado para la reducción de la imagen especificando el tamaño y el tamaño de la imagen.
*@autorhoojo
* @createDate 2012-2-6 05:53:10 p.m.
* @param ancho ancho especificado
* @param altura altura especificada
* @param archivo de imagen de imagen
* @return Devuelve la matriz int de ancho y alto
*/
public static int[] getSize(int ancho, int alto, Imagen imagen) {
int targetWidth = imagen.getWidth(nulo);
int targetHeight = imagen.getHeight(nulo);
doble escala = getScaling(targetWidth, targetHeight, ancho, alto);
long standardWidth = Math.round(targetWidth * escala);
long StandardHeight = Math.round(targetHeight * escala);
devolver nuevo int[] { Integer.parseInt(Long.toString(standardWidth)), Integer.parseInt(String.valueOf(standardHeight)) };
}
/**
* <b>función:</b> Devuelve un ancho y alto ampliados o reducidos a través de la proporción y el objeto de imagen especificados.
*@autorhoojo
* @createDate 2012-2-7 10:27:59 a. m.
* @param escala relación de escala
* @param imagen objeto de imagen
* @return Retorno ancho, alto
*/
public static int[] getSize(escala flotante, imagen imagen) {
int targetWidth = image.getWidth(nulo);
int targetHeight = imagen.getHeight(nulo);
long standardWidth = Math.round(targetWidth * escala);
long StandardHeight = Math.round(targetHeight * escala);
devolver nuevo int[] { Integer.parseInt(Long.toString(standardWidth)), Integer.parseInt(String.valueOf(standardHeight)) };
}
public static int[] getSize(int ancho, Imagen imagen) {
int targetWidth = image.getWidth(nulo);
int targetHeight = imagen.getHeight(nulo);
altura larga = Math.round((alturaobjetivo * ancho) / (anchoobjetivo * 1.00f));
devolver nuevo int[] { ancho, Integer.parseInt(String.valueOf(altura)) };
}
public static int[] getSizeByHeight(int altura, Imagen imagen) {
int targetWidth = image.getWidth(nulo);
int targetHeight = imagen.getHeight(nulo);
ancho largo = Math.round((anchoobjetivo * alto) / (altoobjetivo * 1.00f));
devolver nuevo int[] { Integer.parseInt(String.valueOf(ancho)), altura };
}
/**
*
* <b>Función:</b> Reduce el ancho y el alto del archivo de imagen targetFile especificado que sean mayores que el ancho y el alto especificados, y guárdelos en el directorio savePath.
*@autorhoojo
* @createDate 2012-2-6 04:57:02 p.m.
* @param ancho ancho reducido
* @param altura altura reducida
* @param savePath directorio de guardado
* @param targetImage cambió la imagen de destino
* @return Ruta y nombre para guardar la imagen
* @throws ImageFormatException
* @throwsIOException
*/
cambio de tamaño de cadena estática pública (int ancho, int alto, cadena savePath, archivo targetFile) lanza ImageFormatException, IOException {
imagen = ImageIO.read(targetFile);
int[] tamaño = getSize(ancho, alto, imagen);
devolver cambiar tamaño(tamaño[0], tamaño[1], savePath, imagen);
}
/**
*
* <b>Función:</b> Reduzca el ancho y el alto del archivo de imagen de red targetURL especificado que sean mayores que el ancho y el alto especificados, y guárdelos en el directorio savePath.
*@autorhoojo
* @createDate 2012-2-6 04:57:07 p.m.
* @param ancho ancho reducido
* @param altura altura reducida
* @param savePath directorio de guardado
* @param targetImage cambió la imagen de destino
* @return Ruta y nombre para guardar la imagen
* @throws ImageFormatException
* @throwsIOException
*/
El cambio de tamaño de cadena estática pública (int ancho, int alto, cadena savePath, URL targetURL) arroja ImageFormatException, IOException {
imagen = ImageIO.read(targetURL);
int[] tamaño = getSize(ancho, alto, imagen);
devolver cambiar tamaño(tamaño[0], tamaño[1], savePath, imagen);
}
/**
* <b>función:</b> escala un archivo de imagen local según la proporción especificada
*@autorhoojo
* @createDate 2012-2-7 10:29:18 a. m.
* @param escala relación de escala
* @param savePath Guardar ruta y nombre del archivo
* @param targetFile archivo de imagen local
* @return nuevo nombre de archivo
* @throws ImageFormatException
* @throwsIOException
*/
El cambio de tamaño de cadena estática pública (escala flotante, ruta de guardado de cadena, archivo de destino de archivo) arroja ImageFormatException, IOException {
imagen = ImageIO.read(targetFile);
int[] tamaño = getSize(escala, imagen);
devolver cambiar tamaño(tamaño[0], tamaño[1], savePath, imagen);
}
/**
* <b>función:</b> escalar un archivo de imagen de red según la proporción especificada
*@autorhoojo
* @createDate 2012-2-7 10:30:56 a. m.
* @param escala relación de escala
* @param savePath Guardar ruta y nombre del archivo
* @param targetFile archivo de imagen local
* @return nuevo nombre de archivo
* @throws ImageFormatException
* @throwsIOException
*/
El cambio de tamaño de cadena estática pública (escala flotante, ruta de guardado de cadena, URL de destino) arroja ImageFormatException, IOException {
imagen = ImageIO.read(targetURL);
int[] tamaño = getSize(escala, imagen);
devolver cambiar tamaño(tamaño[0], tamaño[1], savePath, imagen);
}
/**
* <b>función:</b> Escala imágenes locales proporcionalmente según un ancho fijo
*@autorhoojo
* @createDate 2012-2-7 10:49:56 a. m.
* @param ancho ancho fijo
* @param savePath guardar ruta y nombre
* @param targetFile archivo de destino local
* @return Devuelve la ruta de guardado
* @throws ImageFormatException
* @throwsIOException
*/
cambio de tamaño de cadena estática pública (ancho int, ruta de guardado de cadena, archivo de destino de archivo) arroja ImageFormatException, IOException {
imagen = ImageIO.read(targetFile);
int[] tamaño = getSize(ancho, imagen);
devolver cambiar tamaño(tamaño[0], tamaño[1], savePath, imagen);
}
/**
* <b>función:</b> Escalar imágenes de red proporcionalmente según un ancho fijo
*@autorhoojo
* @createDate 2012-2-7 10:50:52 a. m.
* @param ancho ancho fijo
* @param savePath guardar ruta y nombre
* @param targetFile archivo de destino local
* @return Devuelve la ruta de guardado
* @throws ImageFormatException
* @throwsIOException
*/
El cambio de tamaño de cadena estática pública (int ancho, String savePath, URL targetURL) arroja ImageFormatException, IOException {
imagen = ImageIO.read(targetURL);
int[] tamaño = getSize(ancho, imagen);
devolver cambiar tamaño(tamaño[0], tamaño[1], savePath, imagen);
}
/**
*
* <b>función:</b> Escala imágenes locales proporcionalmente según una altura fija
*@autorhoojo
* @createDate 2012-2-7 10:51:17 a. m.
* @param altura altura fija
* @param savePath guardar ruta y nombre
* @param targetFile archivo de destino local
* @return Devuelve la ruta de guardado
* @throws ImageFormatException
* @throwsIOException
*/
Cadena estática pública resizeByHeight (int altura, String savePath, File targetFile) lanza ImageFormatException, IOException {
imagen = ImageIO.read(targetFile);
int[] tamaño = getSizeByHeight(altura, imagen);
devolver cambiar tamaño(tamaño[0], tamaño[1], savePath, imagen);
}
/**
* <b>función:</b> Escalar imágenes de red proporcionalmente según una altura fija
*@autorhoojo
* @createDate 2012-2-7 10:52:23 a. m.
* @param altura altura fija
* @param savePath guardar ruta y nombre
* @param targetFile archivo de destino local
* @return Devuelve la ruta de guardado
* @throws ImageFormatException
* @throwsIOException
*/
Cadena estática pública resizeByHeight (altura int, String savePath, URL targetURL) lanza ImageFormatException, IOException {
imagen = ImageIO.read(targetURL);
int[] tamaño = getSizeByHeight(altura, imagen);
devolver cambiar tamaño(tamaño[0], tamaño[1], savePath, imagen);
}
/**
* <b>función:</b>
*@autorhoojo
* @createDate 2012-2-3 10:08:47 a. m.
* argumentos @param
* @throwsIOException
* @throws MalformedURLException
* @throws ImageFormatException
*/
public static void main (String [] args) lanza ImageFormatException, MalformedURLException, IOException {
System.out.println(ScaleImageUtils.resize(140, 140, nulo, nueva URL ("http://www.open-open.com/lib/images/logo.jpg")));
ScaleImageUtils.resize(100, 100, ImageQuality.high.getQuality(), nulo, ImageIO.read(nueva URL ("http://www.open-open.com/lib/images/logo.jpg")));
}
}
Espero que este artículo sea útil para la programación Java de todos.