Das Beispiel in diesem Artikel beschreibt die Methode zum Erstellen von Miniaturansichten und zum Skalieren von Bildverhältnissen in Java. Teilen Sie es als Referenz mit allen. Die spezifische Implementierungsmethode ist wie folgt:
Diese Instanz unterstützt die Skalierung der Breite und Höhe des Bildes auf die angegebene Breite und Höhe und das Speichern im angegebenen Verzeichnis. Das Bildverkleinerungsverhältnis wird basierend auf der Größe des Zielobjekts und der Standardgröße (angegeben) berechnet Die Skalierungsqualität kann eingestellt werden, und die Skalierungsqualität des Bildes kann entsprechend der angegebenen Skalierung des Bildes in Breite und Höhe eingestellt werden.
Der spezifische Code lautet wie folgt:
Kopieren Sie den Codecode wie folgt:
Paket com.hoo.util;
java.awt.Image importieren;
import java.awt.image.BufferedImage;
java.io.File importieren;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
java.net.URL importieren;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
* <b>Funktion:</b> Werkzeugklasse „Bild zoomen“, Miniaturansichten erstellen, Bildproportionen strecken
*@authorhoojo
* @createDate 3.2.2012 10:08:47 Uhr
* @file ScaleImageUtils.java
* @package com.hoo.util
* @Version 1.0
*/
öffentliche abstrakte Klasse ScaleImageUtils {
privater statischer final float DEFAULT_SCALE_QUALITY = 1f;
private static final String DEFAULT_IMAGE_FORMAT = ".jpg"; // Bilddateiformat
private static final String DEFAULT_FILE_PATH = "C:/temp-";
/**
* <b>Funktion:</b> Aufzählungsklasse für die Bildkomprimierungsqualität festlegen;
* Einige Richtlinien: 0,75 hohe Qualität, 0,5 mittlere Qualität, 0,25 niedrige Qualität
*@authorhoojo
* @createDate 2012-2-7 11:31:45 Uhr
* @file ScaleImageUtils.java
* @package com.hoo.util
* @Projekt JQueryMobile
* @Version 1.0
*/
öffentliche Aufzählung ImageQuality {
max (1,0 f), hoch (0,75 f), mittel (0,5 f), niedrig (0,25 f);
private Float-Qualität;
public Float getQuality() {
return this.quality;
}
ImageQuality(Float-Qualität) {
this.quality = Qualität;
}
}
privates statisches Bildbild;
/**
* <b>Funktion:</b> Berechnen Sie das Bildverkleinerungsverhältnis basierend auf der Größe des Zielobjekts und der Standardgröße (angegeben).
*@authorhoojo
* @createDate 2012-2-6 16:41:48 Uhr
* @param targetWidth Die Breite des Ziels
* @param targetHeight die Höhe des Ziels
* @param standardWidth Standardbreite (angegeben).
* @param standardHeight Standardhöhe (angegeben).
* @return das kleinste geeignete Verhältnis
*/
public static double getScaling(double targetWidth, double targetHeight, double standardWidth, double standardHeight) {
double widthScaling = 0d;
double heightScaling = 0d;
if (targetWidth > standardWidth) {
widthScaling = standardWidth / (targetWidth * 1.00d);
} anders {
widthScaling = 1d;
}
if (targetHeight > standardHeight) {
heightScaling = standardHeight / (targetHeight * 1.00d);
} anders {
heightScaling = 1d;
}
return Math.min(widthScaling, heightScaling);
}
/**
* <b>Funktion:</b> Skalieren Sie die Breite und Höhe des Bildes auf die angegebene Breite und Höhe und speichern Sie es im Verzeichnis savePath
*@authorhoojo
* @createDate 2012-2-6 16:54:35 Uhr
* @param width die Breite der Skalierung
* @param height Zoomhöhe
* @param savePath Speicherverzeichnis
* @param targetImage Das Zielbild, das gezoomt werden soll
* @return Bildspeicherpfad und -name
* @throws ImageFormatException
* @throwsIOException
*/
public static String resize(int width, int height, String savePath, Image targetImage) löst ImageFormatException, IOException {
width = Math.max(width, 1);
height = Math.max(height, 1);
BufferedImage image = new BufferedImage(width, height, 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));
JPEGImageEncoder-Encoder = JPEGCodec.createJPEGEncoder(fos);
Encoder.encode(image);
image.flush();
fos.flush();
fos.close();
return savePath;
}
/**
* <b>Funktion:</b> Sie können die Qualität der Bildskalierung festlegen und das Bild entsprechend der angegebenen Breite und Höhe skalieren.
*@authorhoojo
* @createDate 2012-2-7 11:01:27 Uhr
* @param width die Breite der Skalierung
* @param height Zoomhöhe
* @param qualität Bildkomprimierungsqualität, der Maximalwert ist 1; verwenden Sie den Aufzählungswert: {@link ImageQuality}
* Einige Richtlinien: 0,75 hohe Qualität, 0,5 mittlere Qualität, 0,25 niedrige Qualität
* @param savePath Speicherverzeichnis
* @param targetImage Das Zielbild, das gezoomt werden soll
* @return Bildspeicherpfad und -name
* @throws ImageFormatException
* @throwsIOException
*/
public static String resize(int width, int height, Float quality, String savePath, Image targetImage) löst ImageFormatException, IOException {
width = Math.max(width, 1);
height = Math.max(height, 1);
BufferedImage image = new BufferedImage(width, height, 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));
JPEGImageEncoder-Encoder = JPEGCodec.createJPEGEncoder(fos);
JPEGEncodeParam encodeParam = JPEGCodec.getDefaultJPEGEncodeParam(image);
if (Qualität == null || Qualität <= 0) {
Qualität = DEFAULT_SCALE_QUALITY;
}
/**Bildkomprimierungsqualität festlegen*/
encodeParam.setQuality(quality, true);
Encoder.encode(image, encodeParam);
image.flush();
fos.flush();
fos.close();
return savePath;
}
/**
* <b>Funktion:</b> Berechnen Sie die geeignete Größe für die Bildverkleinerung, indem Sie die Größe und die Größe des Bildes angeben
*@authorhoojo
* @createDate 2012-2-6 17:53:10 Uhr
* @param width spezifizierte Breite
* @param height spezifizierte Höhe
* @param image Bilddatei
* @return Gibt das int-Array mit Breite und Höhe zurück
*/
public static int[] getSize(int width, int height, Image image) {
int targetWidth = image.getWidth(null);
int targetHeight = image.getHeight(null);
double scaling = getScaling(targetWidth, targetHeight, width, height);
long standardWidth = Math.round(targetWidth * scaling);
long standardHeight = Math.round(targetHeight * scaling);
return new int[] { Integer.parseInt(Long.toString(standardWidth)), Integer.parseInt(String.valueOf(standardHeight)) };
}
/**
* <b>Funktion:</b> Gibt eine vergrößerte oder verkleinerte Breite und Höhe durch das angegebene Verhältnis und Bildobjekt zurück.
*@authorhoojo
* @createDate 2012-2-7 10:27:59 Uhr
* Skalierungsverhältnis der @param-Skala
* @param Bildbildobjekt
* @return Gibt Breite und Höhe zurück
*/
public static int[] getSize(float scale, 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);
long height = Math.round((targetHeight * width) / (targetWidth * 1.00f));
return new int[] { width, Integer.parseInt(String.valueOf(height)) };
}
public static int[] getSizeByHeight(int height, Image image) {
int targetWidth = image.getWidth(null);
int targetHeight = image.getHeight(null);
long width = Math.round((targetWidth * height) / (targetHeight * 1.00f));
return new int[] { Integer.parseInt(String.valueOf(width)), height };
}
/**
*
* <b>Funktion:</b> Reduzieren Sie die Breite und Höhe der angegebenen Zieldatei-Bilddatei, die größer als die angegebene Breite und Höhe ist, und speichern Sie sie im Verzeichnis savePath.
*@authorhoojo
* @createDate 2012-2-6 16:57:02 Uhr
* @param width reduzierte Breite
* @param height reduzierte Höhe
* @param savePath Speicherverzeichnis
* @param targetImage hat das Zielbild geändert
* @return Bildspeicherpfad und -name
* @throws ImageFormatException
* @throwsIOException
*/
public static String resize(int width, int height, String savePath, File targetFile) löst ImageFormatException, IOException {
image = ImageIO.read(targetFile);
int[] size = getSize(width, height, image);
return resize(size[0], size[1], savePath, image);
}
/**
*
* <b>Funktion:</b> Reduzieren Sie die Breite und Höhe der angegebenen ZielURL-Netzwerkbilddatei, die größer als die angegebene Breite und Höhe ist, und speichern Sie sie im Verzeichnis savePath.
*@authorhoojo
* @createDate 2012-2-6 16:57:07 Uhr
* @param width reduzierte Breite
* @param height reduzierte Höhe
* @param savePath Speicherverzeichnis
* @param targetImage hat das Zielbild geändert
* @return Bildspeicherpfad und -name
* @throws ImageFormatException
* @throwsIOException
*/
public static String resize(int width, int height, String savePath, URL targetURL) löst ImageFormatException, IOException {
image = ImageIO.read(targetURL);
int[] size = getSize(width, height, image);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>Funktion:</b> Skaliert eine lokale Bilddatei entsprechend dem angegebenen Verhältnis
*@authorhoojo
* @createDate 2012-2-7 10:29:18 Uhr
* Skalierungsverhältnis der @param-Skala
* @param savePath Dateipfad und -namen speichern
* @param targetFile lokale Bilddatei
* @return neuer Dateiname
* @throws ImageFormatException
* @throwsIOException
*/
public static String resize(float scale, String savePath, File targetFile) löst ImageFormatException, IOException {
image = ImageIO.read(targetFile);
int[] size = getSize(scale, image);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>Funktion:</b> Skalieren Sie eine Netzwerkbilddatei entsprechend dem angegebenen Verhältnis
*@authorhoojo
* @createDate 2012-2-7 10:30:56 Uhr
* Skalierungsverhältnis der @param-Skala
* @param savePath Dateipfad und -namen speichern
* @param targetFile lokale Bilddatei
* @return neuer Dateiname
* @throws ImageFormatException
* @throwsIOException
*/
public static String resize(float scale, String savePath, URL targetURL) löst ImageFormatException, IOException {
image = ImageIO.read(targetURL);
int[] size = getSize(scale, image);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>Funktion:</b> Lokale Bilder proportional entsprechend einer festen Breite skalieren
*@authorhoojo
* @createDate 2012-2-7 10:49:56 Uhr
* @param width feste Breite
* @param savePath Pfad und Namen speichern
* @param targetFile lokale Zieldatei
* @return Gibt den Speicherpfad zurück
* @throws ImageFormatException
* @throwsIOException
*/
public static String resize(int width, String savePath, File targetFile) löst ImageFormatException, IOException {
image = ImageIO.read(targetFile);
int[] size = getSize(width, image);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>Funktion:</b> Netzwerkbilder proportional entsprechend einer festen Breite skalieren
*@authorhoojo
* @createDate 2012-2-7 10:50:52 Uhr
* @param width feste Breite
* @param savePath Pfad und Namen speichern
* @param targetFile lokale Zieldatei
* @return Gibt den Speicherpfad zurück
* @throws ImageFormatException
* @throwsIOException
*/
public static String resize(int width, String savePath, URL targetURL) löst ImageFormatException, IOException {
image = ImageIO.read(targetURL);
int[] size = getSize(width, image);
return resize(size[0], size[1], savePath, image);
}
/**
*
* <b>Funktion:</b> Lokale Bilder proportional entsprechend einer festen Höhe skalieren
*@authorhoojo
* @createDate 2012-2-7 10:51:17 Uhr
* @param height feste Höhe
* @param savePath Pfad und Namen speichern
* @param targetFile lokale Zieldatei
* @return Gibt den Speicherpfad zurück
* @throws ImageFormatException
* @throwsIOException
*/
public static String resizeByHeight(int height, String savePath, File targetFile) löst ImageFormatException, IOException {
image = ImageIO.read(targetFile);
int[] size = getSizeByHeight(height, image);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>Funktion:</b> Netzwerkbilder proportional entsprechend einer festen Höhe skalieren
*@authorhoojo
* @createDate 2012-2-7 10:52:23 Uhr
* @param height feste Höhe
* @param savePath Pfad und Namen speichern
* @param targetFile lokale Zieldatei
* @return Gibt den Speicherpfad zurück
* @throws ImageFormatException
* @throwsIOException
*/
public static String resizeByHeight(int height, String savePath, URL targetURL) löst ImageFormatException, IOException {
image = ImageIO.read(targetURL);
int[] size = getSizeByHeight(height, image);
return resize(size[0], size[1], savePath, image);
}
/**
* <b>Funktion:</b>
*@authorhoojo
* @createDate 3.2.2012 10:08:47 Uhr
* @param args
* @throwsIOException
* @throws MalformedURLException
* @throws ImageFormatException
*/
public static void main(String[] args) löst ImageFormatException, MalformedURLException, IOException {
System.out.println(ScaleImageUtils.resize(140, 140, null, neue 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")));
}
}
Ich hoffe, dass dieser Artikel für die Java-Programmierung aller hilfreich sein wird.