دعونا نلقي نظرة على التأثير أولاً:
اختبار واحد:
الصورة الأصلية:
تقديم:
الاختبار 2:
الصورة الأصلية:
تقديم:
جزء الكود:
انسخ رمز الكود كما يلي:
/**
*
*/
الحزمة com.b510؛
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
استيراد java.io.File؛
استيراد java.io.FileInputStream؛
import java.io.IOException;
import java.util.Date;
import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
/**
*@التاريخ 26-11-2012
* @المؤلف xhw
*
*/
فئة عامة ImageCut {
/**
* اسم مسار الصورة المصدر مثل: c:/1.jpg
*/
سلسلة خاصة srcpath = "e:/poool.jpg";
/**
* قص اسم مسار تخزين الصور على سبيل المثال: c:/2.jpg
*/
سلسلة فرعية خاصة = "e:/pool_end"؛
/**
*تنسيق الصورة jpg
*/
السلسلة النهائية الثابتة الخاصة IMAGE_FORM_OF_JPG = "jpg";
/**
* صيغة الصورة png
*/
السلسلة النهائية الثابتة الخاصة IMAGE_FORM_OF_PNG = "png"؛
/**
* x إحداثي نقطة القص
*/
كثافة العمليات الخاصة س ؛
/**
* إحداثي Y لنقطة القطع
*/
كثافة العمليات الخاصة ذ؛
/**
* عرض نقطة القطع
*/
عرض كثافة العمليات الخاصة؛
/**
* ارتفاع نقطة القطع
*/
ارتفاع كثافة العمليات الخاصة؛
صورة عامة () {
}
ImageCut العامة (int x، int y، int width، int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
public static void main(String[] args) يطرح الاستثناء {
ImageCut imageCut = new ImageCut(134, 0, 366, 366);
imageCut.cut(imageCut.getSrcpath(), imageCut.getSubpath());
}
/**
* إرجاع مكرر يحتوي على جميع برامج ImageReaders المسجلة حاليًا والتي تدعي أنها قادرة على فك تشفير التنسيق المحدد.
* المعلمة: formatName - تحتوي على اسم التنسيق غير الرسمي (مثل "jpeg" أو "tiff")، وما إلى ذلك.
*
* @param postFix
* امتداد الملف
* @يعود
*/
المكرر العام<ImageReader> getImageReadersByFormatName(String postFix) {
التبديل (بوست فيكس) {
الحالة IMAGE_FORM_OF_JPG:
إرجاع ImageIO.getImageReadersByFormatName(IMAGE_FORM_OF_JPG);
الحالة IMAGE_FORM_OF_PNG:
إرجاع ImageIO.getImageReadersByFormatName(IMAGE_FORM_OF_PNG);
تقصير:
إرجاع ImageIO.getImageReadersByFormatName(IMAGE_FORM_OF_JPG);
}
}
/**
* قص الصورة وحفظ الصورة الجديدة التي تم اقتصاصها.
*param srcpath مسار الصورة المصدر
*param subpath قص مسار تخزين الصور
* @throwsIOException
*/
قطع الفراغ العام (سلسلة srcpath، سلسلة فرعية) يلقي IOException {
FileInputStream = فارغ؛
ImageInputStream iis = null;
يحاول {
// قراءة ملف الصورة
is = new FileInputStream(srcpath);
// احصل على اسم اللاحقة للملف
String postFix = getPostfix(srcpath);
System.out.println("تنسيق الصورة هو:" + postFix);
/*
* إرجاع مكرر يحتوي على جميع برامج ImageReaders المسجلة حاليًا والتي تدعي أنها قادرة على فك تشفير التنسيق المحدد.
* المعلمة: formatName - تحتوي على اسم التنسيق غير الرسمي (مثل "jpeg" أو "tiff")، وما إلى ذلك.
*/
Iterator<ImageReader> it = getImageReadersByFormatName(postFix);
قارئ ImageReader = it.next();
// الحصول على دفق الصور
iis = ImageIO.createImageInputStream(is);
/*
* <p>iis:قراءة المصدر.true:البحث للأمام فقط</p>.
* يعني هذا الإعداد أن الصور الموجودة في مصدر الإدخال ستتم قراءتها بشكل تسلسلي فقط، مما قد يسمح للقارئ بتجنب التخزين المؤقت لأجزاء الإدخال التي تحتوي على بيانات مرتبطة بالصور التي تمت قراءتها مسبقًا.
*/
Reader.setInput(iis, true);
/*
* <p>فئة تصف كيفية فك تشفير الدفق<p> تستخدم لتحديد كيفية فك تشفير الدفق من Java Image I/O عند الإدخال
* يقوم الدفق بتحويل صورة أو مجموعة من الصور في سياق الإطار. سيتم تنفيذ المكونات الإضافية لتنسيقات صور معينة من برنامج ImageReader الخاص بهم
* تقوم طريقة getDefaultReadParam بإرجاع مثيل ImageReadParam.
*/
ImageReadParam param = Reader.getDefaultReadParam();
/*
* منطقة اقتصاص الصورة. يحدد المستطيل منطقة في مساحة الإحداثيات، من خلال كائن المستطيل
* يمكن للإحداثيات (x، y) وعرض وارتفاع قمة الرأس اليسرى العليا تحديد هذه المنطقة.
*/
Rectangle rect = new Rectangle(x, y, width, height);
// توفير صورة مخزنة لاستخدامها كهدف لفك تشفير بيانات البكسل.
param.setSourceRegion(rect);
/*
* استخدم ImageReadParam المقدم لقراءة الكائن المحدد بواسطة فهرس imageIndex والتعامل معه على أنه كامل
* إرجاع BufferedImage.
*/
BufferedImage bi = Reader.read(0, param);
//حفظ الصورة الجديدة
ImageIO.write(bi, postFix, new File(subpath + "_" + new Date().getTime() + "." + postFix));
} أخيراً {
إذا (هو ! = فارغ)
قريب () ؛
إذا (iis!= فارغة)
iis.إغلاق();
}
}
/**
* احصل على اسم اللاحقة inputFilePath، على سبيل المثال: اسم اللاحقة "e:/test.pptx" هو: "pptx"<br>
*
* @param inputFilePath
* @يعود
*/
سلسلة عامة getPostfix(سلسلة inputFilePath) {
return inputFilePath.substring(inputFilePath.lastIndexOf(".") + 1);
}
كثافة العمليات العامة getHeight() {
ارتفاع العودة
}
مجموعة الفراغ العام (ارتفاع كثافة العمليات) {
this.height = height;
}
سلسلة عامة getSrcpath () {
إرجاع المسار؛
}
مجموعة الفراغ العامة (سلسلة srcpath) {
this.srcpath = srcpath;
}
سلسلة عامة getSubpath () {
عودة المسار الفرعي؛
}
مجموعة الفراغ العام (المسار الفرعي للسلسلة) {
this.subpath = subpath;
}
كثافة العمليات العامة getWidth () {
عرض العودة
}
مجموعة الفراغ العام (عرض int) {
this.width = width;
}
كثافة العمليات العامة getX () {
العودة س؛
}
مجموعة الفراغ العام (int x) {
this.x = x;
}
كثافة العمليات العامة getY() {
العودة ذ؛
}
مجموعة الفراغ العام Y (int y) {
this.y = y;
}
}