Kode kompresi gambar Java
Copy kode kodenya sebagai berikut:
paket com.img;
impor java.awt.Gambar;
impor java.awt.image.BufferedImage;
impor java.io.File;
impor java.io.FileOutputStream;
impor java.io.IOException;
impor javax.imageio.ImageIO;
impor com.sun.image.codec.jpeg.JPEGCodec;
impor com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
*
* @author Coke dengan gula
*/
kelas publik CompressPicDemo {
File pribadi file = null; // objek file
private String inputDir; //Masukkan jalur peta
private String outputDir; // Jalur grafik keluaran
private String inputFileName; //Masukkan nama file gambar
private String outputFileName; // Nama file gambar keluaran
private int lebar keluaran = 100; //Lebar gambar keluaran default
private int outputHeight = 100; //Tinggi gambar keluaran default
proporsi boolean pribadi = true; // Apakah akan menskalakan tanda secara proporsional (standarnya adalah penskalaan proporsional)
public CompressPicDemo() {//Inisialisasi variabel
masukanDir = "";
keluaranDir = "";
masukanNamaFile = "";
keluaranNamaFile = "";
lebar keluaran = 100;
keluaranTinggi = 100;
}
public void setInputDir(String inputDir) {
ini.inputDir = inputDir;
}
public void setOutputDir(String keluaranDir) {
ini.outputDir = outputDir;
}
public void setInputFileName(String inputFileName) {
this.inputFileName = inputFileName;
}
public void setOutputFileName(String keluaranFileName) {
ini.outputFileName = outputFileName;
}
kekosongan publik setOutputWidth(int lebar keluaran) {
this.outputWidth = lebar keluaran;
}
public void setOutputHeight(int keluaranTinggi) {
this.outputHeight = outputHeight;
}
public void setWidthAndHeight(int lebar, int tinggi) {
this.outputWidth = lebar;
this.outputHeight = tinggi;
}
/*
* Dapatkan ukuran gambar
* Masukkan parameter Jalur string: jalur gambar
*/
public long getPicSize(Jalur string) {
file = File baru(jalur);
return file.panjang();
}
// Pemrosesan gambar
public String kompresPic() {
mencoba {
//Dapatkan file sumber
file = File baru(inputDir + inputFileName);
if (!file.ada()) {
kembali "";
}
Gambar img = ImageIO.read(file);
// Tentukan apakah format gambar sudah benar
if (img.getWidth(null) == -1) {
System.out.println("tidak dapat membaca, coba lagi!" + "<BR>");
kembalikan "tidak";
} kalau tidak {
int lebar baru; int tinggi baru;
// Tentukan apakah penskalaannya proporsional
if (ini.proporsi == benar) {
// Hitung lebar dan tinggi gambar keluaran untuk penskalaan proporsional
double rate1 = ((ganda) img.getWidth(null)) / (ganda) outputWidth + 0,1;
double rate2 = ((double) img.getHeight(null)) / (double) outputHeight + 0,1;
// Melakukan kontrol zoom berdasarkan rasio zoom yang lebih besar
tarif ganda = tarif1 > tarif2 ? tarif1 : tarif2;
newWidth = (int) (((double) img.getWidth(null)) / rate);
newHeight = (int) (((double) img.getHeight(null)) / rate);
} kalau tidak {
newWidth = img.getWidth(null); // Lebar gambar keluaran
newHeight = img.getHeight(null); // Tinggi gambar keluaran
}
Tag BufferedImage = BufferedImage baru((int) lebar baru, (int) tinggi baru, BufferedImage.TYPE_INT_RGB);
/*
* Algoritma thumbnail Image.SCALE_SMOOTH menghasilkan kehalusan gambar thumbnail
* Prioritasnya lebih tinggi dari kecepatan. Kualitas gambar yang dihasilkan lebih baik tetapi kecepatannya lambat.
*/
tag.getGraphics().drawImage(img.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), 0, 0, null);
FileOutputStream keluar = FileOutputStream baru(outputDir + outputFileName);
// JPEGImageEncoder dapat diterapkan pada konversi jenis gambar lainnya
Encoder JPEGImageEncoder = JPEGCodec.createJPEGEncoder(keluar);
encoder.encode(tag);
keluar.dekat();
}
} tangkapan (IOException ex) {
ex.printStackTrace();
}
kembalikan "oke";
}
public String kompresPic (String inputDir, String outputDir, String inputFileName, String outputFileName) {
//Masukkan jalur gambar
ini.inputDir = inputDir;
//Jalur grafik keluaran
ini.outputDir = outputDir;
// Masukkan nama file gambar
this.inputFileName = inputFileName;
// Keluaran nama file gambar
this.outputFileName = keluaranFileName;
kembalikan kompresPic();
}
public String kompresPic(String inputDir, String outputDir, String inputFileName, String outputFileName, int lebar, int tinggi, boolean gp) {
//Masukkan jalur gambar
ini.inputDir = inputDir;
//Jalur grafik keluaran
ini.outputDir = outputDir;
// Masukkan nama file gambar
this.inputFileName = inputFileName;
// Keluaran nama file gambar
ini.outputFileName = outputFileName;
//Mengatur panjang dan lebar gambar
setWidthAndHeight(lebar, tinggi);
// Apakah itu tanda penskalaan proporsional
this.proportion = gp;
kembalikan kompresPic();
}
// tes utama
// kompresPic (jalur gambar besar, buat jalur gambar kecil, nama file gambar besar, buat nama teks gambar kecil, buat lebar gambar kecil, buat tinggi gambar kecil, apakah akan diskalakan secara proporsional (defaultnya benar))
public static void main(String[] arg) {
CompressPicDemo mypic = baru CompressPicDemo();
System.out.println("Masukkan ukuran gambar: " + mypic.getPicSize("e://1.jpg")/1024 + "KB");
mypic.compressPic("e://", "e://test//", "1.jpg", "r1.jpg", 120, 120, salah);
}
}