Java DIP - Teknik Kompresi Gambar
Sebuah gambar dapat dengan mudah dikompresi dan disimpan melalui Java. Kompresi gambar melibatkan mengubah gambar menjadi jpg dan menyimpannya.
Untuk mengkompres gambar, kita membaca gambar tersebut dan mengubahnya menjadi objek BufferedImage.
Selanjutnya, kami mendapatkan ImageWriter dari getImageWritersByFormatName()metode yang ditemukan di kelas ImageIO. Dari ImageWriter ini, buat fileImageWriteParamobyek. Sintaksnya diberikan di bawah ini -
Iterator<ImageWriter> list = ImageIO.getImageWritersByFormatName("jpg");
ImageWriteParam obj = writer_From_List.getDefaultWriteParam();
Dari objek ImageWriteParam ini, Anda dapat menyetel kompresi dengan memanggil dua metode berikut ini setCompressionMode() dan setCompressionQuality(). Sintaksnya seperti yang diberikan di bawah ini -
obj.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
obj.setCompressionQuality(0.05f);
Metode setCompressionMode () menggunakan Mode_EXPLICIT sebagai parameter. Beberapa MODES lainnya dijelaskan secara singkat -
Sr.No. | Mode |
---|---|
1 | MODE_DEFAULT Ini adalah nilai konstan yang dapat diteruskan ke metode untuk mengaktifkan fitur tersebut untuk penulisan di masa mendatang. |
2 | MODE_DISABLED Ini adalah nilai konstan yang dapat diteruskan ke metode untuk menonaktifkan fitur tersebut untuk penulisan selanjutnya. |
3 | MODE_EXPLICIT Ini adalah nilai konstan yang dapat diteruskan ke metode untuk mengaktifkan fitur tersebut untuk penulisan di masa mendatang. |
Selain metode kompresi, ada metode lain yang disediakan oleh kelas ImageWriteParam. Mereka dijelaskan secara singkat -
Sr.No. | Metode & Deskripsi |
---|---|
1 | canOffsetTiles() Ini mengembalikan nilai true jika penulis dapat melakukan pemilahan dengan offset grid bukan nol saat menulis. |
2 | getBitRate(float quality) Ini mengembalikan float yang menunjukkan perkiraan jumlah bit data keluaran untuk setiap bit data gambar masukan pada tingkat kualitas tertentu. |
3 | getLocale() Ini mengembalikan Lokal yang saat ini ditetapkan, atau null jika hanya Lokal default yang didukung. |
4 | isCompressionLossless() Ini mengembalikan nilai true jika jenis kompresi saat ini memberikan kompresi lossless. |
5 | unsetCompression() Ini menghapus semua jenis kompresi dan pengaturan kualitas sebelumnya. |
6 | unsetTiling() Ini menghapus parameter petak petak sebelumnya yang ditentukan oleh panggilan ke setTiling. |
Contoh
Contoh berikut menunjukkan penggunaan kelas ImageWriteParam untuk mengompresi gambar -
import java.io.*;
import java.util.*;
import java.awt.image.*;
import javax.imageio.*;
import javax.imageio.stream.ImageOutputStream;
class Compression {
public static void main(String[] args) throws IOException {
File input = new File("digital_image_processing.jpg");
BufferedImage image = ImageIO.read(input);
File compressedImageFile = new File("compress.jpg");
OutputStream os =new FileOutputStream(compressedImageFile);
Iterator<ImageWriter>writers = ImageIO.getImageWritersByFormatName("jpg");
ImageWriter writer = (ImageWriter) writers.next();
ImageOutputStream ios = ImageIO.createImageOutputStream(os);
writer.setOutput(ios);
ImageWriteParam param = writer.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(0.05f);
writer.write(null, new IIOImage(image, null, null), param);
os.close();
ios.close();
writer.dispose();
}
}
Keluaran
Saat Anda menjalankan kode yang diberikan, itu akan memampatkan gambar digital_image_processing.jpg ke gambar terkompresi yang setara dan menulisnya di hard disk dengan nama compress.jpg.