كود ضغط الصور جافا
انسخ رمز الكود كما يلي:
package com.img;
import java.awt.Image;
import java.awt.image.BufferedImage;
استيراد java.io.File؛
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
/**
*
* @author كوكا كولا بالسكر
*/
الطبقة العامة CompressPicDemo {
ملف ملف خاص = فارغ؛ // كائن الملف
سلسلة خاصة inputDir // مسار خريطة الإدخال
سلسلة خاصة OutputDir؛ // مسار الرسم البياني للإخراج
Private String inputFileName; // اسم ملف صورة الإدخال
سلسلة خاصة اسم الملف // اسم ملف صورة الإخراج
Private intputWidth = 100; // عرض صورة الإخراج الافتراضي
Private intputHeight = 100; // ارتفاع صورة الإخراج الافتراضي
نسبة منطقية خاصة = صحيح؛ // ما إذا كان سيتم قياس العلامة بشكل متناسب (الافتراضي هو المقياس النسبي)
public CompressPicDemo() { // تهيئة المتغيرات
inputDir = "";
OutputDir = "";
inputFileName = "";
اسم الملف = "";
عرض الإخراج = 100؛
ارتفاع الإخراج = 100؛
}
public void setInputDir(String inputDir) {
this.inputDir = inputDir;
}
public void setOutputDir(StringputDir) {
this.outputDir =outputDir;
}
public void setInputFileName(String inputFileName) {
this.inputFileName = inputFileName;
}
public void setOutputFileName(StringputFileName) {
this.outputFileName =outputFileName;
}
مجموعة الفراغ العام (intputWidth) {
this.outputWidth =outputWidth;
}
مجموعة الفراغ العام (intputHeight) {
this.outputHeight =outputHeight;
}
مجموعة الفراغ العامWidthAndHeight(int width,int height) {
this.outputWidth = width;
this.outputHeight = height;
}
/*
* الحصول على حجم الصورة
* تمرير مسار سلسلة المعلمة: مسار الصورة
*/
getPicSize العامة الطويلة (مسار السلسلة) {
ملف = ملف جديد (المسار)؛
إرجاع الملف. الطول () ؛
}
// معالجة الصور
سلسلة عامة ضغطPic () {
يحاول {
// احصل على الملف المصدر
file = new File(inputDir + inputFileName);
إذا (! file.exists()) {
يعود ""؛
}
Image img = ImageIO.read(file);
// تحديد ما إذا كان تنسيق الصورة صحيحًا
إذا (img.getWidth(null) == -1) {
System.out.println("لا يمكن القراءة، أعد المحاولة!" + "<BR>");
إرجاع "لا" ؛
} آخر {
int newWidth;
// تحديد ما إذا كان القياس متناسبًا
إذا (هذه النسبة == صحيح) {
// احسب عرض وارتفاع الصورة الناتجة للقياس النسبي
معدل مزدوج 1 = ((مزدوج) img.getWidth(null)) / (مزدوج)outputWidth + 0.1;
double Rate2 = ((double) img.getHeight(null)) / (double)putHeight + 0.1;
// قم بإجراء التحكم في التكبير/التصغير بناءً على نسبة التكبير/التصغير الأكبر
معدل مزدوج = معدل 1 > معدل 2؟
newWidth = (int) (((double) img.getWidth(null)) /rate);
newHeight = (int) (((double) img.getHeight(null)) /rate);
} آخر {
newWidth = img.getWidth(null);// عرض صورة الإخراج
newHeight = img.getHeight(null); // ارتفاع صورة الإخراج
}
علامة BufferedImage = new 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 = new FileOutputStream(outputDir +putFileName);
// يمكن تطبيق JPEGImageEncoder على تحويل أنواع الصور الأخرى
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tag);
out.Close();
}
} قبض على (IOException على سبيل المثال) {
ex.printStackTrace();
}
العودة "حسنا"؛
}
سلسلة ضغطPic العامة (سلسلة inputDir، سلسلة OutputDir، String inputFileName، StringputFileName) {
// مسار صورة الإدخال
this.inputDir = inputDir;
// مسار الرسم البياني للإخراج
this.outputDir =outputDir;
// أدخل اسم ملف الصورة
this.inputFileName = inputFileName;
// اسم ملف صورة الإخراج
this.outputFileName =outputFileName;
إرجاع ضغط الصورة () ؛
}
public String pressPic(String inputDir, StringputDir, String inputFileName, StringputFileName, int width, int height, boolean gp) {
// مسار صورة الإدخال
this.inputDir = inputDir;
// مسار الرسم البياني للإخراج
this.outputDir =outputDir;
// أدخل اسم ملف الصورة
this.inputFileName = inputFileName;
// اسم ملف صورة الإخراج
this.outputFileName =outputFileName;
// اضبط طول الصورة وعرضها
setWidthAndHeight(width, height);
// ما إذا كانت علامة قياس متناسبة
this.proportion = gp;
إرجاع ضغط الصورة () ؛
}
// الاختبار الرئيسي
// ضغط Pic (مسار صورة كبير، إنشاء مسار صورة صغير، اسم ملف صورة كبير، إنشاء اسم نص صغير للصورة، إنشاء عرض صورة صغير، إنشاء ارتفاع صغير للصورة، ما إذا كان يجب القياس بشكل متناسب (الافتراضي هو الصحيح))
public static void main(String[] arg) {
CompressPicDemo mypic = new CompressPicDemo();
System.out.println("حجم الصورة المدخلة:" + mypic.getPicSize("e://1.jpg")/1024 + "KB");
mypic.compressPic ("e://"، "e://test//"، "1.jpg"، "r1.jpg"، 120، 120، false)؛
}
}