Java DIP - Kỹ thuật nén ảnh
Một hình ảnh có thể dễ dàng được nén và lưu trữ thông qua Java. Nén hình ảnh liên quan đến việc chuyển đổi hình ảnh thành jpg và lưu trữ nó.
Để nén ảnh, chúng tôi đọc ảnh và chuyển đổi thành đối tượng BufferedImage.
Hơn nữa, chúng tôi nhận được ImageWriter từ getImageWritersByFormatName()phương thức được tìm thấy trong lớp ImageIO. Từ ImageWriter này, tạo mộtImageWriteParamvật. Cú pháp của nó được đưa ra dưới đây:
Iterator<ImageWriter> list = ImageIO.getImageWritersByFormatName("jpg");
ImageWriteParam obj = writer_From_List.getDefaultWriteParam();
Từ đối tượng ImageWriteParam này, bạn có thể đặt nén bằng cách gọi hai phương thức này là setCompressionMode() và setCompressionQuality(). Các cú pháp của chúng như được đưa ra dưới đây:
obj.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
obj.setCompressionQuality(0.05f);
Phương thức setCompressionMode () lấy Mode_EXPLICIT làm tham số. Một số CHẾ ĐỘ khác được mô tả ngắn gọn -
Sr.No. | Các chế độ |
---|---|
1 |
MODE_DEFAULT Nó là một giá trị không đổi có thể được chuyển vào các phương thức để kích hoạt tính năng đó cho các lần ghi sau này. |
2 |
MODE_DISABLED Nó là một giá trị không đổi có thể được chuyển vào các phương thức để tắt tính năng đó cho các lần ghi sau này. |
3 |
MODE_EXPLICIT Nó là một giá trị không đổi có thể được chuyển vào các phương thức để kích hoạt tính năng đó cho các lần ghi sau này. |
Ngoài các phương thức nén, còn có các phương thức khác được cung cấp bởi lớp ImageWriteParam. Chúng được mô tả ngắn gọn -
Sr.No. | Phương pháp & Mô tả |
---|---|
1 |
canOffsetTiles() Nó trả về true nếu người viết có thể thực hiện lát gạch với các hiệu số lưới khác 0 trong khi viết. |
2 |
getBitRate(float quality) Nó trả về một số nổi cho biết ước tính số bit dữ liệu đầu ra cho mỗi bit dữ liệu hình ảnh đầu vào ở mức chất lượng nhất định. |
3 |
getLocale() Nó trả về Ngôn ngữ hiện được đặt hoặc null nếu chỉ một Ngôn ngữ mặc định được hỗ trợ. |
4 |
isCompressionLossless() Nó trả về true nếu kiểu nén hiện tại cung cấp tính năng nén không mất dữ liệu. |
5 |
unsetCompression() Nó loại bỏ mọi cài đặt chất lượng và kiểu nén trước đó. |
6 |
unsetTiling() Nó loại bỏ bất kỳ tham số lưới ô xếp nào trước đó được chỉ định bởi các cuộc gọi đến setTiling. |
Thí dụ
Ví dụ sau minh họa việc sử dụng lớp ImageWriteParam để nén hình ảnh:
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();
}
}
Đầu ra
Khi bạn thực thi mã đã cho, nó sẽ nén hình ảnh digital_image_processing.jpg vào hình ảnh nén tương đương của nó và ghi nó vào đĩa cứng với tên compress.jpg.