Contoh dalam artikel ini menjelaskan metode membuat thumbnail dan menskalakan rasio gambar di Java. Bagikan dengan semua orang untuk referensi Anda. Metode implementasi spesifiknya adalah sebagai berikut:
Contoh ini mendukung penskalaan lebar dan tinggi Gambar ke lebar dan tinggi yang ditentukan, dan menyimpannya di direktori yang ditentukan. Rasio pengurangan gambar dihitung berdasarkan ukuran objek target dan ukuran standar (yang ditentukan). kualitas penskalaan dapat diatur, dan kualitas penskalaan gambar dapat diatur sesuai dengan Skala lebar dan tinggi gambar yang ditentukan.
Kode spesifiknya adalah sebagai berikut:
Copy kode kodenya sebagai berikut:
paket com.hoo.util;
impor java.awt.Gambar;
impor java.awt.image.BufferedImage;
impor java.io.File;
impor java.io.FileOutputStream;
impor java.io.IOException;
impor java.net.MalformedURLException;
impor java.net.URL;
impor javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.ImageFormatException;
impor com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
impor com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
* <b>fungsi:</b> Kelas alat zoom gambar, membuat thumbnail, meregangkan proporsi gambar
*@penulishoojo
* @createDate 3-2-2012 10:08:47
* @file ScaleImageUtils.java
* @paket com.hoo.util
* @versi 1.0
*/
kelas abstrak publik ScaleImageUtils {
float akhir statis pribadi DEFAULT_SCALE_QUALITY = 1f;
private static final String DEFAULT_IMAGE_FORMAT = ".jpg";
String akhir statis pribadi DEFAULT_FILE_PATH = "C:/temp-";
/**
* <b>fungsi:</b> Mengatur kelas enumerasi kualitas kompresi gambar;
* Beberapa pedoman: 0,75 kualitas tinggi, 0,5 kualitas sedang, 0,25 kualitas rendah
*@penulishoojo
* @createDate 2012-2-7 11:31:45
* @file ScaleImageUtils.java
* @paket com.hoo.util
* @proyek JQueryMobile
* @versi 1.0
*/
enum publik Kualitas Gambar {
maks (1,0f), tinggi (0,75f), sedang (0,5f), rendah (0,25f);
kualitas Float pribadi;
getQuality Mengapung publik() {
kembalikan ini.kualitas;
}
Kualitas Gambar(Kualitas mengambang) {
this.quality = kualitas;
}
}
gambar Gambar statis pribadi;
/**
* <b>fungsi:</b> Menghitung rasio pengecilan gambar berdasarkan ukuran objek target dan ukuran standar (yang ditentukan)
*@penulishoojo
* @createDate 6-2-2012 16:41:48
* @param targetWidth Lebar target
* @param targetHeight ketinggian target
* @param standardWidth lebar standar (ditentukan).
* @param standardHeight tinggi standar (ditentukan).
* @kembalikan rasio terkecil yang sesuai
*/
getScaling ganda statis publik(lebar target ganda, tinggi target ganda, lebar standar ganda, tinggi standar ganda) {
skala lebar ganda = 0d;
tinggi gandaScaling = 0d;
if (lebar target > lebar standar) {
widthScaling = lebar standar / (lebar target * 1,00d);
} kalau tidak {
lebarSkala = 1d;
}
if (Tinggi target > Tinggi standar) {
heightScaling = standardHeight / (targetHeight * 1.00d);
} kalau tidak {
penskalaan tinggi = 1d;
}
return Math.min(widthScaling, heightScaling);
}
/**
* <b>fungsi:</b> Skala lebar dan tinggi Gambar ke lebar dan tinggi yang ditentukan, dan simpan di direktori savePath
*@penulishoojo
* @createDate 6-2-2012 16:54:35
* @param lebar lebar penskalaan
* @param tinggi zoom tinggi
* @param savePath menyimpan direktori
* @param targetImage Gambar target yang akan diperbesar
* @return Jalur dan nama penyimpanan gambar
* @melempar ImageFormatException
* @throwsIOException
*/
pengubahan ukuran String statis publik (lebar int, tinggi int, String savePath, Gambar targetImage) melempar ImageFormatException, IOException {
lebar = Matematika.max(lebar, 1);
tinggi = Matematika.max(tinggi, 1);
Gambar BufferedImage = BufferedImage baru (lebar, tinggi, BufferedImage.TYPE_INT_RGB);
image.getGraphics().drawImage(targetImage, 0, 0, lebar, tinggi, null);
if (savePath == null || "".sama dengan(savePath)) {
savePath = DEFAULT_FILE_PATH + Sistem.currentTimeMillis() + DEFAULT_IMAGE_FORMAT;
}
FileOutputStream fos = FileOutputStream baru(File baru(savePath));
Encoder JPEGImageEncoder = JPEGCodec.createJPEGEncoder(fos);
encoder.encode(gambar);
gambar.flush();
fos.flush();
fos.close();
kembalikan savePath;
}
/**
* <b>fungsi:</b> Anda dapat mengatur kualitas skala gambar dan menskalakan gambar sesuai dengan lebar dan tinggi yang ditentukan.
*@penulishoojo
* @createDate 2012-2-7 11:01:27
* @param lebar lebar penskalaan
* @param tinggi zoom tinggi
* Kualitas @param Kualitas kompresi gambar, nilai maksimumnya adalah 1; gunakan nilai enumerasi: {@link ImageQuality}
* Beberapa pedoman: 0,75 kualitas tinggi, 0,5 kualitas sedang, 0,25 kualitas rendah
* @param savePath menyimpan direktori
* @param targetImage Gambar target yang akan diperbesar
* @return Jalur dan nama penyimpanan gambar
* @melempar ImageFormatException
* @throwsIOException
*/
pengubahan ukuran String statis publik (lebar int, tinggi int, kualitas Float, String savePath, Gambar targetImage) menampilkan ImageFormatException, IOException {
lebar = Matematika.max(lebar, 1);
tinggi = Math.max(tinggi, 1);
Gambar BufferedImage = BufferedImage baru (lebar, tinggi, BufferedImage.TYPE_INT_RGB);
image.getGraphics().drawImage(targetImage, 0, 0, lebar, tinggi, null);
if (savePath == null || "".sama dengan(savePath)) {
savePath = DEFAULT_FILE_PATH + Sistem.currentTimeMillis() + DEFAULT_IMAGE_FORMAT;
}
FileOutputStream fos = FileOutputStream baru(File baru(savePath));
Encoder JPEGImageEncoder = JPEGCodec.createJPEGEncoder(fos);
JPEGEncodeParam encodeParam = JPEGCodec.getDefaultJPEGEncodeParam(gambar);
if (kualitas == null || kualitas <= 0) {
kualitas = DEFAULT_SCALE_QUALITY;
}
/**Setel kualitas kompresi gambar*/
encodeParam.setQuality(kualitas, benar);
encoder.encode(gambar, encodeParam);
gambar.flush();
fos.flush();
fos.close();
kembalikan savePath;
}
/**
* <b>fungsi:</b> Hitung ukuran yang sesuai untuk pengecilan gambar dengan menentukan ukuran dan ukuran gambar
*@penulishoojo
* @createDate 6-2-2012 17:53:10
* @param lebar menentukan lebar
* @param tinggi tinggi yang ditentukan
* File gambar gambar @param
* @return Mengembalikan array int dengan lebar dan tinggi
*/
public static int[] getSize(int lebar, int tinggi, Gambar gambar) {
int targetWidth = gambar.getWidth(null);
int targetHeight = gambar.getHeight(null);
penskalaan ganda = getScaling(targetWidth, targetHeight, width, height);
panjang standardWidth = Math.round(targetWidth * scaling);
panjang standardHeight = Math.round(targetHeight * scaling);
kembalikan int baru[] { Integer.parseInt(Long.toString(standardWidth)), Integer.parseInt(String.valueOf(standardHeight)) };
}
/**
* <b>fungsi:</b> Mengembalikan lebar dan tinggi yang diperbesar atau diperkecil melalui rasio dan objek gambar yang ditentukan.
*@penulishoojo
* @createDate 2012-2-7 10:27:59
* Rasio skala skala @param
* @param gambar objek gambar
* @return Mengembalikan lebar, tinggi
*/
public static int[] getSize(skala mengambang, Gambar gambar) {
int targetWidth = gambar.getWidth(null);
int targetHeight = gambar.getHeight(null);
panjang standardWidth = Math.round(targetWidth * skala);
panjang standardHeight = Math.round(targetHeight * skala);
kembalikan int baru[] { Integer.parseInt(Long.toString(standardWidth)), Integer.parseInt(String.valueOf(standardHeight)) };
}
public static int[] getSize(int lebar, Gambar gambar) {
int targetWidth = gambar.getWidth(null);
int targetHeight = gambar.getHeight(null);
tinggi panjang = Math.round((targetHeight * width) / (targetWidth * 1.00f));
kembalikan int baru[] { lebar, Integer.parseInt(String.valueOf(height)) };
}
public static int[] getSizeByHeight(int tinggi, Gambar gambar) {
int targetWidth = gambar.getWidth(null);
int targetHeight = gambar.getHeight(null);
lebar panjang = Math.round((targetWidth * height) / (targetHeight * 1.00f));
kembalikan int baru[] { Integer.parseInt(String.valueOf(width)), tinggi };
}
/**
*
* <b>fungsi:</b> Mengurangi lebar dan tinggi file gambar targetFile yang ditentukan lebih besar dari lebar dan tinggi yang ditentukan, dan menyimpannya di direktori savePath.
*@penulishoojo
* @createDate 6-2-2012 16:57:02
* @param lebar dikurangi lebarnya
* @param tinggi dikurangi tinggi
* @param savePath menyimpan direktori
* @param targetImage mengubah gambar target
* @return Jalur dan nama penyimpanan gambar
* @melempar ImageFormatException
* @throwsIOException
*/
pengubahan ukuran String statis publik (lebar int, tinggi int, String savePath, File targetFile) melempar ImageFormatException, IOException {
gambar = ImageIO.read(targetFile);
int[] ukuran = getSize(lebar, tinggi, gambar);
kembali mengubah ukuran(ukuran[0], ukuran[1], savePath, gambar);
}
/**
*
* <b>fungsi:</b> Kurangi lebar dan tinggi file gambar jaringan targetURL tertentu yang lebih besar dari lebar dan tinggi yang ditentukan, dan simpan di direktori savePath.
*@penulishoojo
* @createDate 6-2-2012 16:57:07
* @param lebar dikurangi lebarnya
* @param tinggi dikurangi tinggi
* @param savePath menyimpan direktori
* @param targetImage mengubah gambar target
* @return Jalur dan nama penyimpanan gambar
* @melempar ImageFormatException
* @throwsIOException
*/
pengubahan ukuran String statis publik (lebar int, tinggi int, String savePath, URL targetURL) melempar ImageFormatException, IOException {
gambar = ImageIO.baca(targetURL);
int[] ukuran = getSize(lebar, tinggi, gambar);
kembali mengubah ukuran(ukuran[0], ukuran[1], savePath, gambar);
}
/**
* <b>fungsi:</b> Menskalakan file gambar lokal sesuai dengan rasio yang ditentukan
*@penulishoojo
* @createDate 2012-2-7 10:29:18
* Rasio skala skala @param
* @param savePath Simpan jalur dan nama file
* @param targetFile file gambar lokal
* @kembalikan nama file baru
* @melempar ImageFormatException
* @throwsIOException
*/
pengubahan ukuran String statis publik (skala mengambang, String savePath, File targetFile) melempar ImageFormatException, IOException {
gambar = ImageIO.read(targetFile);
int[] ukuran = getSize(skala, gambar);
kembali mengubah ukuran(ukuran[0], ukuran[1], savePath, gambar);
}
/**
* <b>fungsi:</b> Menskalakan file gambar jaringan sesuai dengan rasio yang ditentukan
*@penulishoojo
* @createDate 7-2-012 10:30:56
* Rasio skala skala @param
* @param savePath Simpan jalur dan nama file
* @param targetFile file gambar lokal
* @kembalikan nama file baru
* @melempar ImageFormatException
* @throwsIOException
*/
pengubahan ukuran String statis publik (skala mengambang, String savePath, URL targetURL) menampilkan ImageFormatException, IOException {
gambar = ImageIO.baca(targetURL);
int[] ukuran = getSize(skala, gambar);
kembali mengubah ukuran(ukuran[0], ukuran[1], savePath, gambar);
}
/**
* <b>fungsi:</b> Skala gambar lokal secara proporsional sesuai dengan lebar tetap
*@penulishoojo
* @createDate 2012-2-7 10:49:56
* @param lebar lebar tetap
* @param savePath simpan jalur dan nama
* @param targetFile file target lokal
* @return Mengembalikan jalur penyimpanan
* @melempar ImageFormatException
* @throwsIOException
*/
pengubahan ukuran String statis publik (lebar int, String savePath, File targetFile) melempar ImageFormatException, IOException {
gambar = ImageIO.read(targetFile);
int[] ukuran = getSize(lebar, gambar);
kembali mengubah ukuran(ukuran[0], ukuran[1], savePath, gambar);
}
/**
* <b>fungsi:</b> Menskalakan gambar jaringan secara proporsional sesuai dengan lebar tetap
*@penulishoojo
* @createDate 7-2-012 10:50:52
* @param lebar lebar tetap
* @param savePath simpan jalur dan nama
* @param targetFile file target lokal
* @return Mengembalikan jalur penyimpanan
* @melempar ImageFormatException
* @throwsIOException
*/
pengubahan ukuran String statis publik (lebar int, String savePath, URL targetURL) menampilkan ImageFormatException, IOException {
gambar = ImageIO.baca(targetURL);
int[] ukuran = getSize(lebar, gambar);
kembali mengubah ukuran(ukuran[0], ukuran[1], savePath, gambar);
}
/**
*
* <b>fungsi:</b> Skala gambar lokal secara proporsional sesuai dengan ketinggian tetap
*@penulishoojo
* @createDate 2012-2-7 10:51:17
* @param tinggi tetap tinggi
* @param savePath simpan jalur dan nama
* @param targetFile file target lokal
* @return Mengembalikan jalur penyimpanan
* @melempar ImageFormatException
* @throwsIOException
*/
resizeByHeight String statis publik (tinggi int, String savePath, File targetFile) melempar ImageFormatException, IOException {
gambar = ImageIO.read(targetFile);
int[] ukuran = getSizeByHeight(tinggi, gambar);
kembali mengubah ukuran(ukuran[0], ukuran[1], savePath, gambar);
}
/**
* <b>fungsi:</b> Menskalakan gambar jaringan secara proporsional sesuai dengan ketinggian tetap
*@penulishoojo
* @createDate 2012-2-7 10:52:23
* @param tinggi tetap tinggi
* @param savePath simpan jalur dan nama
* @param targetFile file target lokal
* @return Mengembalikan jalur penyimpanan
* @melempar ImageFormatException
* @throwsIOException
*/
resizeByHeight String statis publik (tinggi int, String savePath, URL targetURL) melempar ImageFormatException, IOException {
gambar = ImageIO.baca(targetURL);
int[] ukuran = getSizeByHeight(tinggi, gambar);
kembali mengubah ukuran(ukuran[0], ukuran[1], savePath, gambar);
}
/**
* <b>fungsi:</b>
*@penulishoojo
* @createDate 3-2-2012 10:08:47
* @param argumen
* @throwsIOException
* @melempar MalformedURLException
* @melempar ImageFormatException
*/
public static void main(String[] args) menampilkan ImageFormatException, MalformedURLException, IOException {
System.out.println(ScaleImageUtils.resize(140, 140, null, URL baru("http://www.open-open.com/lib/images/logo.jpg")));
ScaleImageUtils.resize(100, 100, ImageQuality.high.getQuality(), null, ImageIO.read(URL baru("http://www.open-open.com/lib/images/logo.jpg")));
}
}
Saya harap artikel ini bermanfaat untuk pemrograman Java semua orang.