รหัสการบีบอัดภาพ Java
คัดลอกรหัสรหัส ดังต่อไปนี้:
แพ็คเกจ com.img;
นำเข้า java.awt.Image;
นำเข้า java.awt.image.BufferedImage;
นำเข้า java.io.File;
นำเข้า java.io.FileOutputStream;
นำเข้า java.io.IOException;
นำเข้า javax.imageio.ImageIO;
นำเข้า com.sun.image.codec.jpeg.JPEGCodec;
นำเข้า com.sun.image.codec.jpeg.JPEGImageEncoder;
-
-
*@ผู้เขียน โค้กใส่น้ำตาล
-
CompressPicDemo คลาสสาธารณะ {
ไฟล์ส่วนตัว = null; // วัตถุไฟล์
สตริงส่วนตัว inputDir; // ป้อนเส้นทางแผนที่
สตริงเอาท์พุตส่วนตัว // เส้นทางกราฟเอาท์พุต
สตริงส่วนตัว inputFileName; //ป้อนชื่อไฟล์รูปภาพ
สตริงส่วนตัว outputFileName; // ชื่อไฟล์รูปภาพเอาท์พุต
int outputWidth ส่วนตัว = 100; // ความกว้างของรูปภาพเอาต์พุตเริ่มต้น
int outputHeight ส่วนตัว = 100; // ความสูงของรูปภาพเอาต์พุตเริ่มต้น
สัดส่วนบูลีนส่วนตัว = จริง; // ไม่ว่าจะปรับขนาดเครื่องหมายตามสัดส่วน (ค่าเริ่มต้นคือมาตราส่วนตามสัดส่วน)
CompressPicDemo สาธารณะ () { // เริ่มต้นตัวแปร
inputDir = "";
outputDir = "";
inputFileName = "";
ชื่อไฟล์เอาท์พุต = "";
ความกว้างขาออก = 100;
เอาท์พุทความสูง = 100;
-
โมฆะสาธารณะ setInputDir (สตริง inputDir) {
this.inputDir = inputDir;
-
โมฆะสาธารณะ setOutputDir (สตริง outputDir) {
this.outputDir = เอาท์พุตDir;
-
โมฆะสาธารณะ setInputFileName (สตริง inputFileName) {
this.inputFileName = inputFileName;
-
โมฆะสาธารณะ setOutputFileName (สตริงชื่อไฟล์เอาต์พุต) {
this.outputFileName = เอาท์พุตFileName;
-
โมฆะสาธารณะ setOutputWidth (int outputWidth) {
this.outputWidth = เอาต์พุตความกว้าง;
-
โมฆะสาธารณะ setOutputHeight (int outputHeight) {
this.outputHeight = เอาต์พุตความสูง;
-
โมฆะสาธารณะ setWidthAndHeight (ความกว้าง int, ความสูง int) {
this.outputWidth = ความกว้าง;
this.outputHeight = ความสูง;
-
-
* รับขนาดภาพ
* ส่งผ่านพารามิเตอร์ String path: เส้นทางรูปภาพ
-
getPicSize ยาวสาธารณะ (เส้นทางสตริง) {
ไฟล์ = ไฟล์ใหม่ (เส้นทาง);
ส่งกลับไฟล์.ความยาว();
-
//การประมวลผลภาพ
สตริงสาธารณะ compressPic() {
พยายาม {
//รับไฟล์ต้นฉบับ
ไฟล์ = ไฟล์ใหม่ (inputDir + inputFileName);
ถ้า (!file.exists()) {
กลับ "";
-
รูปภาพ img = ImageIO.read (ไฟล์);
// ตรวจสอบว่ารูปแบบภาพถูกต้องหรือไม่
ถ้า (img.getWidth(null) == -1) {
System.out.println(" อ่านไม่ได้ ลองใหม่อีกครั้ง!" + "<BR>");
กลับ "ไม่";
} อื่น {
int ความกว้างใหม่; int ความสูงใหม่;
// พิจารณาว่าเป็นการปรับขนาดตามสัดส่วนหรือไม่
ถ้า (this.proportion == จริง) {
// คำนวณความกว้างและความสูงของภาพที่ส่งออกเพื่อปรับขนาดตามสัดส่วน
อัตราสองเท่า 1 = ((สองเท่า) img.getWidth(null)) / (สองเท่า) ความกว้างเอาต์พุต + 0.1;
อัตราสองเท่า2 = ((สองเท่า) img.getHeight(null)) / (สองเท่า) เอาต์พุตความสูง + 0.1;
// ควบคุมการซูมตามอัตราการซูมที่มากขึ้น
อัตราสองเท่า = อัตรา 1 > อัตรา 2 ? อัตรา 1 : อัตรา 2;
newWidth = (int) (((สองเท่า) img.getWidth(null)) / อัตรา);
newHeight = (int) (((สองเท่า) img.getHeight(null)) / อัตรา);
} อื่น {
newWidth = img.getWidth(null); // ความกว้างของภาพที่ส่งออก
newHeight = img.getHeight(null); // ความสูงของภาพที่ส่งออก
-
แท็ก BufferedImage = ใหม่ BufferedImage ((int) newWidth, (int) newHeight, BufferedImage.TYPE_INT_RGB);
-
* อัลกอริธึมภาพขนาดย่อ Image.SCALE_SMOOTH สร้างความเรียบเนียนของภาพขนาดย่อ
* ลำดับความสำคัญจะสูงกว่าความเร็ว คุณภาพของภาพที่สร้างขึ้นจะดีกว่าแต่ความเร็วจะช้า
-
tag.getGraphics().drawImage(img.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), 0, 0, null);
FileOutputStream out = FileOutputStream ใหม่ (outputDir + outputFileName);
// JPEGImageEncoder สามารถใช้กับการแปลงรูปภาพประเภทอื่นได้
ตัวเข้ารหัส JPEGImageEncoder = JPEGCodec.createJPEGEncoder (ออก);
encoder.encode (แท็ก);
ออก.ปิด();
-
} จับ (IOException เช่น) {
เช่น printStackTrace();
-
กลับ "ตกลง";
-
สตริงสาธารณะ compressPic (สตริง inputDir, สตริง outputDir, สตริง inputFileName, สตริง outputFileName) {
//ใส่เส้นทางรูปภาพ
this.inputDir = inputDir;
// เส้นทางกราฟเอาท์พุต
this.outputDir = เอาท์พุตDir;
// กรอกชื่อไฟล์รูปภาพ
this.inputFileName = inputFileName;
// ชื่อไฟล์รูปภาพที่ส่งออก
this.outputFileName = เอาท์พุตFileName;
กลับ compressPic();
-
สตริงสาธารณะ compressPic (สตริง inputDir, สตริง outputDir, สตริง inputFileName, สตริง outputFileName, ความกว้าง int, ความสูง int, บูลีน gp) {
//ใส่เส้นทางรูปภาพ
this.inputDir = inputDir;
// เส้นทางกราฟเอาท์พุต
this.outputDir = เอาท์พุตDir;
// กรอกชื่อไฟล์รูปภาพ
this.inputFileName = inputFileName;
// ชื่อไฟล์รูปภาพที่ส่งออก
this.outputFileName = เอาท์พุตFileName;
//กำหนดความยาวและความกว้างของภาพ
setWidthAndHeight(ความกว้าง,ความสูง);
// ไม่ว่าจะเป็นเครื่องหมายสเกลตามสัดส่วน
นี่.สัดส่วน = gp;
กลับ compressPic();
-
// การทดสอบหลัก
// compressPic (เส้นทางรูปภาพขนาดใหญ่, สร้างเส้นทางรูปภาพขนาดเล็ก, ชื่อไฟล์รูปภาพขนาดใหญ่, สร้างชื่อข้อความรูปภาพขนาดเล็ก, สร้างความกว้างของรูปภาพขนาดเล็ก, สร้างความสูงของรูปภาพขนาดเล็ก, ไม่ว่าจะปรับขนาดตามสัดส่วนหรือไม่ (ค่าเริ่มต้นคือจริง))
โมฆะคงที่สาธารณะ main (String [] arg) {
CompressPicDemo mypic = ใหม่ CompressPicDemo();
System.out.println("ใส่ขนาดรูปภาพ: " + mypic.getPicSize("e://1.jpg")/1024 + "KB");
mypic.compressPic("e://", "e://test//", "1.jpg", "r1.jpg", 120, 120, false);
-
-