L'exemple de cet article décrit la méthode de création de vignettes et de mise à l'échelle des ratios d'image en Java. Partagez-le avec tout le monde pour votre référence. La méthode spécifique de mise en œuvre est la suivante :
Cette instance prend en charge la mise à l'échelle de la largeur et de la hauteur de l'image à la largeur et à la hauteur spécifiées et son enregistrement dans le répertoire spécifié. Le taux de réduction de l'image est calculé en fonction de la taille de l'objet cible et de la taille standard (spécifiée). la qualité de mise à l'échelle peut être définie et la qualité de mise à l'échelle de l'image peut être définie en fonction de l'échelle spécifiée de l'image en largeur et en hauteur.
Le code spécifique est le suivant :
Copiez le code comme suit :
paquet com.hoo.util;
importer java.awt.Image ;
importer java.awt.image.BufferedImage ;
importer java.io.File ;
importer java.io.FileOutputStream ;
importer java.io.IOException ;
importer java.net.MalformedURLException ;
importer java.net.URL ;
importer javax.imageio.ImageIO ;
importer com.sun.image.codec.jpeg.ImageFormatException ;
importer com.sun.image.codec.jpeg.JPEGCodec ;
importer com.sun.image.codec.jpeg.JPEGEncodeParam ;
importer com.sun.image.codec.jpeg.JPEGImageEncoder ;
/**
* <b>fonction :</b> classe d'outils de zoom sur l'image, création de vignettes, étirement des proportions de l'image
*@auteurhoojo
* @createDate 2012-2-3 10:08:47
* @file ScaleImageUtils.java
* @package com.hoo.util
* @version 1.0
*/
classe abstraite publique ScaleImageUtils {
float final statique privé DEFAULT_SCALE_QUALITY = 1f;
private static final String DEFAULT_IMAGE_FORMAT = ".jpg" // Format de fichier image
chaîne finale statique privée DEFAULT_FILE_PATH = "C:/temp-";
/**
* <b>fonction :</b> définit la classe d'énumération de la qualité de compression d'image ;
* Quelques lignes directrices : 0,75 de haute qualité, 0,5 de qualité moyenne, 0,25 de faible qualité
*@auteurhoojo
* @createDate 7/2/2012 11:31:45
* @file ScaleImageUtils.java
* @package com.hoo.util
* @projet JQueryMobile
* @version 1.0
*/
énumération publique ImageQuality {
max (1,0f), élevé (0,75f), moyen (0,5f), faible (0,25f);
qualité flottante privée ;
public FloatgetQuality() {
renvoie this.quality;
}
ImageQuality (qualité flottante) {
this.quality = qualité ;
}
}
image statique privée ;
/**
* <b>fonction :</b> calcule le taux de réduction de l'image en fonction de la taille de l'objet cible et de la taille standard (spécifiée)
*@auteurhoojo
* @createDate 6/2/2012 16:41:48
* @param targetWidth La largeur de la cible
* @param targetHeight la hauteur de la cible
* @param standardWidth largeur standard (spécifiée)
* @param standardHeight hauteur standard (spécifiée)
* @renvoie le plus petit rapport approprié
*/
public static double getScaling (double targetWidth, double targetHeight, double standardWidth, double standardHeight) {
double largeurÉchelle = 0d ;
double hauteurScaling = 0d;
if (targetWidth > standardWidth) {
widthScaling = standardWidth / (targetWidth * 1.00d);
} autre {
largeurÉchelle = 1d ;
}
if (targetHeight > standardHeight) {
heightScaling = standardHeight / (targetHeight * 1.00d);
} autre {
échelle de hauteur = 1d ;
}
return Math.min (widthScaling, heightScaling);
}
/**
* <b>fonction :</b> redimensionnez la largeur et la hauteur de l'image à la largeur et à la hauteur spécifiées, et enregistrez-la dans le répertoire savePath
*@auteurhoojo
* @createDate 6/2/2012 16:54:35
* @param width la largeur de mise à l'échelle
* @param hauteur hauteur de zoom
* @param savePath répertoire de sauvegarde
* @param targetImage L'image cible à zoomer
* @return Chemin et nom de sauvegarde de l'image
* @throws ImageFormatException
* @throwsIOException
*/
Le redimensionnement de chaîne statique public (int width, int height, String savePath, Image targetImage) renvoie ImageFormatException, IOException {
largeur = Math.max(largeur, 1);
hauteur = Math.max(hauteur, 1);
Image BufferedImage = new BufferedImage (largeur, hauteur, BufferedImage.TYPE_INT_RGB);
image.getGraphics().drawImage(targetImage, 0, 0, width, height, null);
if (savePath == null || "".equals(savePath)) {
savePath = DEFAULT_FILE_PATH + System.currentTimeMillis() + DEFAULT_IMAGE_FORMAT ;
}
FileOutputStream fos = new FileOutputStream(new File(savePath));
Encodeur JPEGImageEncoder = JPEGCodec.createJPEGEncoder(fos);
encoder.encode(image);
image.flush();
fos.flush();
fos.close();
retourner savePath ;
}
/**
* <b>fonction :</b> Vous pouvez définir la qualité de mise à l'échelle de l'image et redimensionner l'image en fonction de la largeur et de la hauteur spécifiées.
*@auteurhoojo
* @createDate 2012-2-7 11:01:27
* @param width la largeur de mise à l'échelle
* @param hauteur hauteur de zoom
* @param quality Qualité de compression d'image, la valeur maximale est 1 ; utilisez la valeur d'énumération : {@link ImageQuality}
* Quelques lignes directrices : 0,75 de haute qualité, 0,5 de qualité moyenne, 0,25 de faible qualité
* @param savePath répertoire de sauvegarde
* @param targetImage L'image cible à zoomer
* @return Chemin et nom de sauvegarde de l'image
* @throws ImageFormatException
* @throwsIOException
*/
Le redimensionnement de chaîne statique public (largeur int, hauteur int, qualité flottante, String savePath, Image targetImage) renvoie ImageFormatException, IOException {
largeur = Math.max(largeur, 1);
hauteur = Math.max(hauteur, 1);
Image BufferedImage = new BufferedImage (largeur, hauteur, BufferedImage.TYPE_INT_RGB);
image.getGraphics().drawImage(targetImage, 0, 0, width, height, null);
if (savePath == null || "".equals(savePath)) {
savePath = DEFAULT_FILE_PATH + System.currentTimeMillis() + DEFAULT_IMAGE_FORMAT ;
}
FileOutputStream fos = new FileOutputStream(new File(savePath));
Encodeur JPEGImageEncoder = JPEGCodec.createJPEGEncoder(fos);
JPEGEncodeParam encodeParam = JPEGCodec.getDefaultJPEGEncodeParam(image);
if (qualité == null || qualité <= 0) {
qualité = DEFAULT_SCALE_QUALITY ;
}
/**Définir la qualité de compression de l'image*/
encodeParam.setQuality(qualité, true);
encoder.encode(image, encodeParam);
image.flush();
fos.flush();
fos.close();
retourner savePath ;
}
/**
* <b>fonction :</b> Calculez la taille appropriée pour la réduction de l'image en spécifiant la taille et la taille de l'image
*@auteurhoojo
* @createDate 6/2/2012 17:53:10
* @param width largeur spécifiée
* @param hauteur hauteur spécifiée
* Fichier image @param
* @return Renvoie le tableau int de largeur et de hauteur
*/
public static int[] getSize (int largeur, int hauteur, image image) {
int targetWidth = image.getWidth(null);
int targetHeight = image.getHeight(null);
double mise à l'échelle = getScaling (targetWidth, targetHeight, width, height);
long standardWidth = Math.round (targetWidth * mise à l'échelle);
long standardHeight = Math.round(targetHeight * mise à l'échelle);
return new int[] { Integer.parseInt(Long.toString(standardWidth)), Integer.parseInt(String.valueOf(standardHeight)) };
}
/**
* <b>fonction :</b> renvoie une largeur et une hauteur agrandies ou réduites via le rapport et l'objet image spécifiés.
*@auteurhoojo
* @createDate 7/2/2012 10:27:59
* Rapport de mise à l'échelle de l'échelle @param
* @param image objet image
* @return Renvoie la largeur, la hauteur
*/
public static int[] getSize (échelle flottante, image image) {
int targetWidth = image.getWidth(null);
int targetHeight = image.getHeight(null);
long standardWidth = Math.round(targetWidth * scale);
long standardHeight = Math.round(targetHeight * scale);
return new int[] { Integer.parseInt(Long.toString(standardWidth)), Integer.parseInt(String.valueOf(standardHeight)) };
}
public static int[] getSize(int width, Image image) {
int targetWidth = image.getWidth(null);
int targetHeight = image.getHeight(null);
longue hauteur = Math.round((targetHeight * width) / (targetWidth * 1.00f));
return new int[] { width, Integer.parseInt(String.valueOf(height)) };
}
public static int[] getSizeByHeight(int hauteur, Image image) {
int targetWidth = image.getWidth(null);
int targetHeight = image.getHeight(null);
longue largeur = Math.round((targetWidth * height) / (targetHeight * 1.00f));
return new int[] { Integer.parseInt(String.valueOf(width)), hauteur };
}
/**
*
* <b>fonction :</b> réduisez la largeur et la hauteur du fichier image targetFile spécifié qui sont supérieures à la largeur et à la hauteur spécifiées, et enregistrez-les dans le répertoire savePath.
*@auteurhoojo
* @createDate 6/2/2012 16:57:02
* @param width largeur réduite
* @param hauteur hauteur réduite
* @param savePath répertoire de sauvegarde
* @param targetImage a modifié l'image cible
* @return Chemin et nom de sauvegarde de l'image
* @throws ImageFormatException
* @throwsIOException
*/
Le redimensionnement de chaîne statique public (int width, int height, String savePath, File targetFile) renvoie ImageFormatException, IOException {
image = ImageIO.read(targetFile);
int[] size = getSize(largeur, hauteur, image);
return resize(size[0], size[1], savePath, image);
}
/**
*
* <b>fonction :</b> réduisez la largeur et la hauteur du fichier image réseau targetURL spécifié qui sont supérieures à la largeur et à la hauteur spécifiées, et enregistrez-les dans le répertoire savePath.
*@auteurhoojo
* @createDate 6/2/2012 16:57:07
* @param width largeur réduite
* @param hauteur hauteur réduite
* @param savePath répertoire de sauvegarde
* @param targetImage a modifié l'image cible
* @return Chemin et nom de sauvegarde de l'image
* @throws ImageFormatException
* @throwsIOException
*/
Le redimensionnement de chaîne statique public (int width, int height, String savePath, URL targetURL) renvoie ImageFormatException, IOException {
image = ImageIO.read(targetURL);
int[] size = getSize(largeur, hauteur, image);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>fonction :</b> redimensionne un fichier image local selon le rapport spécifié
*@auteurhoojo
* @createDate 2012-2-7 10:29:18
* Rapport de mise à l'échelle de l'échelle @param
* @param savePath Enregistre le chemin et le nom du fichier
* @param targetFile fichier image local
* @retourne le nouveau nom de fichier
* @throws ImageFormatException
* @throwsIOException
*/
Le redimensionnement de chaîne statique public (échelle flottante, chaîne savePath, fichier targetFile) renvoie ImageFormatException, IOException {
image = ImageIO.read(targetFile);
int[] size = getSize(échelle, image);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>fonction :</b> met à l'échelle un fichier image réseau selon le rapport spécifié
*@auteurhoojo
* @createDate 7/2/2012 10:30:56
* Rapport de mise à l'échelle de l'échelle @param
* @param savePath Enregistre le chemin et le nom du fichier
* @param targetFile fichier image local
* @retourne le nouveau nom de fichier
* @throws ImageFormatException
* @throwsIOException
*/
Le redimensionnement de chaîne statique public (échelle flottante, chaîne savePath, URL targetURL) génère ImageFormatException, IOException {
image = ImageIO.read(targetURL);
int[] size = getSize(échelle, image);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>fonction :</b> redimensionne les images locales proportionnellement selon une largeur fixe
*@auteurhoojo
* @createDate 7/2/2012 10:49:56
* @param width largeur fixe
* @param savePath enregistre le chemin et le nom
* @param targetFile fichier cible local
* @return Renvoie le chemin de sauvegarde
* @throws ImageFormatException
* @throwsIOException
*/
Le redimensionnement de chaîne statique public (int width, String savePath, File targetFile) renvoie ImageFormatException, IOException {
image = ImageIO.read(targetFile);
int[] size = getSize(largeur, image);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>Fonction :</b> mettre à l'échelle les images réseau proportionnellement selon une largeur fixe
*@auteurhoojo
* @createDate 7/2/2012 10:50:52
* @param width largeur fixe
* @param savePath enregistre le chemin et le nom
* @param targetFile fichier cible local
* @return Renvoie le chemin de sauvegarde
* @throws ImageFormatException
* @throwsIOException
*/
Le redimensionnement de chaîne statique public (int width, String savePath, URL targetURL) renvoie ImageFormatException, IOException {
image = ImageIO.read(targetURL);
int[] size = getSize(largeur, image);
return resize(size[0], size[1], savePath, image);
}
/**
*
* <b>fonction :</b> redimensionne les images locales proportionnellement selon une hauteur fixe
*@auteurhoojo
* @createDate 2012-2-7 10:51:17
* @param hauteur hauteur fixe
* @param savePath enregistre le chemin et le nom
* @param targetFile fichier cible local
* @return Renvoie le chemin de sauvegarde
* @throws ImageFormatException
* @throwsIOException
*/
public static String resizeByHeight (int height, String savePath, File targetFile) lance ImageFormatException, IOException {
image = ImageIO.read(targetFile);
int[] size = getSizeByHeight(hauteur, image);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>Fonction :</b> mettre à l'échelle les images du réseau proportionnellement en fonction d'une hauteur fixe
*@auteurhoojo
* @createDate 7/2/2012 10:52:23
* @param hauteur hauteur fixe
* @param savePath enregistre le chemin et le nom
* @param targetFile fichier cible local
* @return Renvoie le chemin de sauvegarde
* @throws ImageFormatException
* @throwsIOException
*/
public static String resizeByHeight (int height, String savePath, URL targetURL) lance ImageFormatException, IOException {
image = ImageIO.read(targetURL);
int[] size = getSizeByHeight(hauteur, image);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>fonction :</b>
*@auteurhoojo
* @createDate 2012-2-3 10:08:47
* @param arguments
* @throwsIOException
* @throws MalformedURLException
* @throws ImageFormatException
*/
public static void main (String[] args) lance ImageFormatException, MalformedURLException, IOException {
System.out.println(ScaleImageUtils.resize(140, 140, null, nouvelle 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")));
}
}
J'espère que cet article sera utile à la programmation Java de chacun.