O exemplo neste artigo descreve o método de criação de miniaturas e dimensionamento de proporções de imagens em Java. Compartilhe com todos para sua referência. O método de implementação específico é o seguinte:
Esta instância suporta dimensionar a largura e a altura da imagem para a largura e altura especificadas e salvá-la no diretório especificado. A taxa de redução da imagem é calculada com base no tamanho do objeto de destino e no tamanho padrão (especificado) da imagem. a qualidade do dimensionamento pode ser definida e a qualidade do dimensionamento da imagem pode ser definida de acordo com a escala especificada da imagem em largura e altura.
O código específico é o seguinte:
Copie o código do código da seguinte forma:
pacote com.hoo.util;
importar java.awt.Image;
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>função:</b> classe de ferramenta de zoom de imagem, criação de miniaturas, alongamento de proporções de imagem
*@autorhoojo
* @createDate 3/2/2012 10:08:47
* @file ScaleImageUtils.java
* @pacote com.hoo.util
*@versão 1.0
*/
classe abstrata pública ScaleImageUtils {
float final estático privado DEFAULT_SCALE_QUALITY = 1f;
private static final String DEFAULT_IMAGE_FORMAT = ".jpg" // Formato do arquivo de imagem
private static final String DEFAULT_FILE_PATH = "C:/temp-";
/**
* <b>função:</b> Define a classe de enumeração da qualidade de compressão da imagem;
* Algumas diretrizes: 0,75 de alta qualidade, 0,5 de qualidade média, 0,25 de baixa qualidade
*@autorhoojo
* @createDate 7/2/2012 11:31:45
* @file ScaleImageUtils.java
* @pacote com.hoo.util
* @project JQueryMobile
*@versão 1.0
*/
enum público ImageQuality {
máx(1,0f), alto(0,75f), médio(0,5f), baixo(0,25f);
qualidade flutuante privada;
public Float getQualidade() {
retorne esta.qualidade;
}
ImageQuality(qualidade flutuante) {
this.qualidade = qualidade;
}
}
imagem de imagem estática privada;
/**
* <b>função:</b> Calcular a taxa de redução da imagem com base no tamanho do objeto alvo e no tamanho padrão (especificado)
*@autorhoojo
* @createDate 2012-2-6 16:41:48
* @param targetWidth A largura do alvo
* @param targetHeight a altura do alvo
* @param standardWidth largura padrão (especificada)
* @param standardHeight altura padrão (especificada)
* @return a menor proporção adequada
*/
public static double getScaling(double targetWidth, double targetHeight, double standardWidth, double standardHeight) {
largura duplaScaling = 0d;
altura duplaScaling = 0d;
if (targetWidth > largurapadrão) {
widthScaling = largurapadrão / (targetWidth * 1,00d);
} outro {
larguraScaling = 1d;
}
if (targetHeight > standardHeight) {
heightScaling = standardHeight / (targetHeight * 1,00d);
} outro {
escala de altura = 1d;
}
retornar Math.min(widthScaling, heightScaling);
}
/**
* <b>função:</b> dimensione a largura e a altura da imagem para a largura e altura especificadas e salve-a no diretório savePath
*@autorhoojo
* @createDate 6-2-2012 16:54:35
* @param width a largura da escala
* @param altura altura do zoom
* @param savePath salvar diretório
* @param targetImage A imagem alvo a ser ampliada
* @return Caminho e nome para salvar a imagem
* @throws ImageFormatException
* @throwsIOException
*/
public static String resize (largura int, altura int, String savePath, imagem targetImage) lança ImageFormatException, IOException {
largura = Math.max(largura, 1);
altura = Math.max(altura, 1);
Imagem BufferedImage = novo BufferedImage (largura, altura, BufferedImage.TYPE_INT_RGB);
image.getGraphics().drawImage(targetImage, 0, 0, largura, altura, nulo);
if (savePath == null || "".equals(savePath)) {
savePath = DEFAULT_FILE_PATH + System.currentTimeMillis() + DEFAULT_IMAGE_FORMAT;
}
FileOutputStream fos = new FileOutputStream(new Arquivo(savePath));
Codificador JPEGImageEncoder = JPEGCodec.createJPEGEncoder(fos);
codificador.encode(imagem);
imagem.flush();
fos.flush();
fos.close();
retornar savePath;
}
/**
* <b>função:</b> Você pode definir a qualidade do dimensionamento da imagem e dimensionar a imagem de acordo com a largura e altura especificadas.
*@autorhoojo
* @createDate 7/2/2012 11:01:27
* @param width a largura da escala
* @param altura altura do zoom
* @param qualidade Qualidade de compactação de imagem, o valor máximo é 1; use o valor de enumeração: {@link ImageQuality}
* Algumas diretrizes: 0,75 de alta qualidade, 0,5 de qualidade média, 0,25 de baixa qualidade
* @param savePath salvar diretório
* @param targetImage A imagem alvo a ser ampliada
* @return Caminho e nome para salvar a imagem
* @throws ImageFormatException
* @throwsIOException
*/
redimensionamento de string estática pública (largura interna, altura interna, qualidade flutuante, string savePath, imagem targetImage) lança ImageFormatException, IOException {
largura = Math.max(largura, 1);
altura = Math.max(altura, 1);
Imagem BufferedImage = novo BufferedImage (largura, altura, BufferedImage.TYPE_INT_RGB);
image.getGraphics().drawImage(targetImage, 0, 0, largura, altura, nulo);
if (savePath == null || "".equals(savePath)) {
savePath = DEFAULT_FILE_PATH + System.currentTimeMillis() + DEFAULT_IMAGE_FORMAT;
}
FileOutputStream fos = new FileOutputStream(new Arquivo(savePath));
Codificador JPEGImageEncoder = JPEGCodec.createJPEGEncoder(fos);
JPEGEncodeParam encodeParam = JPEGCodec.getDefaultJPEGEncodeParam(imagem);
if (qualidade == nulo || qualidade <= 0) {
qualidade = DEFAULT_SCALE_QUALITY;
}
/**Definir qualidade de compressão de imagem*/
encodeParam.setQuality(qualidade, verdadeiro);
codificador.encode(imagem,encodeParam);
imagem.flush();
fos.flush();
fos.close();
retornar savePath;
}
/**
* <b>função:</b> Calcule o tamanho apropriado para redução de imagem especificando o tamanho e o tamanho da imagem
*@autorhoojo
* @createDate 2012-2-6 17:53:10 PM
* @param largura largura especificada
* @param altura altura especificada
* @param arquivo de imagem de imagem
* @return Retorna o array interno de largura e altura
*/
public static int[] getSize(int largura, int altura, imagem imagem) {
int targetWidth = imagem.getWidth(null);
int targetHeight = imagem.getHeight(null);
escala dupla = getScaling(targetWidth, targetHeight, largura, altura);
largurapadrão longa = Math.round(targetWidth * escala);
long standardHeight = Math.round (targetHeight * escala);
retornar novo int[] { Integer.parseInt(Long.toString(standardWidth)), Integer.parseInt(String.valueOf(standardHeight)) };
}
/**
* <b>função:</b> Retorna uma largura e altura ampliadas ou reduzidas através da proporção especificada e do objeto de imagem.
*@autorhoojo
* @createDate 7/2/2012 10:27:59
* @param proporção de escala da escala
* @param imagem objeto de imagem
* @return Retorna largura, altura
*/
public static int[] getSize(escala flutuante, imagem da imagem) {
int targetWidth = imagem.getWidth(null);
int targetHeight = imagem.getHeight(null);
largurapadrão longa = Math.round(targetWidth * escala);
long standardHeight = Math.round (targetHeight * escala);
retornar novo int[] { Integer.parseInt(Long.toString(standardWidth)), Integer.parseInt(String.valueOf(standardHeight)) };
}
public static int[] getSize(int largura, imagem da imagem) {
int targetWidth = imagem.getWidth(null);
int targetHeight = imagem.getHeight(null);
altura longa = Math.round((targetHeight * largura) / (targetWidth * 1.00f));
retornar novo int[] {largura, Integer.parseInt(String.valueOf(altura)) };
}
public static int[] getSizeByHeight(int altura, imagem imagem) {
int targetWidth = imagem.getWidth(null);
int targetHeight = imagem.getHeight(null);
largura longa = Math.round((targetWidth * height) / (targetHeight * 1.00f));
retornar novo int[] { Integer.parseInt(String.valueOf(largura)), altura };
}
/**
*
* <b>função:</b> Reduza a largura e a altura do arquivo de imagem targetFile especificado que seja maior que a largura e a altura especificadas e salve-os no diretório savePath.
*@autorhoojo
* @createDate 2012-2-6 16:57:02 PM
* @param largura largura reduzida
* @param altura altura reduzida
* @param savePath salvar diretório
* @param targetImage alterou a imagem de destino
* @return Caminho e nome para salvar a imagem
* @throws ImageFormatException
* @throwsIOException
*/
public static String resize (int largura, int altura, String savePath, arquivo targetFile) lança ImageFormatException, IOException {
imagem = ImageIO.read(targetFile);
int[] tamanho = getSize(largura, altura, imagem);
return redimensionar(tamanho[0], tamanho[1], savePath, imagem);
}
/**
*
* <b>função:</b> Reduza a largura e a altura do arquivo de imagem de rede targetURL especificado que seja maior que a largura e a altura especificadas e salve-os no diretório savePath.
*@autorhoojo
* @createDate 6-2-2012 16:57:07
* @param largura largura reduzida
* @param altura altura reduzida
* @param savePath salvar diretório
* @param targetImage alterou a imagem de destino
* @return Caminho e nome para salvar a imagem
* @throws ImageFormatException
* @throwsIOException
*/
redimensionamento de string estática pública (largura int, altura int, string savePath, URL targetURL) lança ImageFormatException, IOException {
imagem = ImageIO.read(targetURL);
int[] tamanho = getSize(largura, altura, imagem);
return redimensionar(tamanho[0], tamanho[1], savePath, imagem);
}
/**
* <b>função:</b> dimensionar um arquivo de imagem local de acordo com a proporção especificada
*@autorhoojo
* @createDate 7/2/2012 10:29:18
* @param proporção de escala da escala
* @param savePath Salva o caminho e nome do arquivo
* @param targetFile arquivo de imagem local
* @return novo nome do arquivo
* @throws ImageFormatException
* @throwsIOException
*/
public static String resize (escala flutuante, String savePath, arquivo targetFile) lança ImageFormatException, IOException {
imagem = ImageIO.read(targetFile);
int[] tamanho = getSize(escala, imagem);
return redimensionar(tamanho[0], tamanho[1], savePath, imagem);
}
/**
* <b>função:</b> dimensionar um arquivo de imagem de rede de acordo com a proporção especificada
*@autorhoojo
* @createDate 7/2/2012 10:30:56
* @param proporção de escala da escala
* @param savePath Salva caminho e nome do arquivo
* @param targetFile arquivo de imagem local
* @return novo nome do arquivo
* @throws ImageFormatException
* @throwsIOException
*/
public static String resize (escala flutuante, String savePath, URL targetURL) lança ImageFormatException, IOException {
imagem = ImageIO.read(targetURL);
int[] tamanho = getSize(escala, imagem);
return redimensionar(tamanho[0], tamanho[1], savePath, imagem);
}
/**
* <b>função:</b> dimensionar imagens locais proporcionalmente de acordo com uma largura fixa
*@autorhoojo
* @createDate 7/2/2012 10:49:56
* @param largura largura fixa
* @param savePath salva caminho e nome
* @param targetFile arquivo de destino local
* @return Retorna o caminho para salvar
* @throws ImageFormatException
* @throwsIOException
*/
public static String resize (largura int, String savePath, arquivo targetFile) lança ImageFormatException, IOException {
imagem = ImageIO.read(targetFile);
int[] tamanho = getSize(largura, imagem);
return redimensionar(tamanho[0], tamanho[1], savePath, imagem);
}
/**
* <b>função:</b> dimensionar imagens de rede proporcionalmente de acordo com uma largura fixa
*@autorhoojo
* @createDate 7/2/2012 10:50:52
* @param largura largura fixa
* @param savePath salva caminho e nome
* @param targetFile arquivo de destino local
* @return Retorna o caminho para salvar
* @throws ImageFormatException
* @throwsIOException
*/
redimensionamento de string estática pública (largura int, string savePath, URL targetURL) lança ImageFormatException, IOException {
imagem = ImageIO.read(targetURL);
int[] tamanho = getSize(largura, imagem);
return redimensionar(tamanho[0], tamanho[1], savePath, imagem);
}
/**
*
* <b>função:</b> dimensionar imagens locais proporcionalmente de acordo com uma altura fixa
*@autorhoojo
* @createDate 7/2/2012 10:51:17
* @param altura altura fixa
* @param savePath salva caminho e nome
* @param targetFile arquivo de destino local
* @return Retorna o caminho para salvar
* @throws ImageFormatException
* @throwsIOException
*/
public static String resizeByHeight (int altura, String savePath, arquivo targetFile) lança ImageFormatException, IOException {
imagem = ImageIO.read(targetFile);
int[] tamanho = getSizeByHeight(altura, imagem);
return redimensionar(tamanho[0], tamanho[1], savePath, imagem);
}
/**
* <b>função:</b> dimensionar imagens de rede proporcionalmente de acordo com uma altura fixa
*@autorhoojo
* @createDate 7/2/2012 10:52:23
* @param altura altura fixa
* @param savePath salva caminho e nome
* @param targetFile arquivo de destino local
* @return Retorna o caminho para salvar
* @throws ImageFormatException
* @throwsIOException
*/
public static String resizeByHeight (int altura, String savePath, URL targetURL) lança ImageFormatException, IOException {
imagem = ImageIO.read(targetURL);
int[] tamanho = getSizeByHeight(altura, imagem);
return redimensionar(tamanho[0], tamanho[1], savePath, imagem);
}
/**
* <b>função:</b>
*@autorhoojo
* @createDate 3-2-2012 10:08:47
* @param argumentos
* @throwsIOException
* @throws MalformadoURLException
* @throws ImageFormatException
*/
public static void main(String[] args) lança ImageFormatException, MalformedURLException, IOException {
System.out.println(ScaleImageUtils.resize(140, 140, null, new URL("http://www.open-open.com/lib/images/logo.jpg")));
ScaleImageUtils.resize(100, 100, ImageQuality.high.getQuality(), null, ImageIO.read(new URL("http://www.open-open.com/lib/images/logo.jpg")));
}
}
Espero que este artigo seja útil para a programação Java de todos.