มาดูเอฟเฟกต์กันก่อน:
ทดสอบอย่างใดอย่างหนึ่ง:
ภาพต้นฉบับ:
การแสดงผล:
ทดสอบ 2:
ภาพต้นฉบับ:
การแสดงผล:
ส่วนรหัส:
คัดลอกรหัสรหัส ดังต่อไปนี้:
-
-
-
แพ็คเกจ com.b510;
นำเข้า java.awt.Rectangle;
นำเข้า java.awt.image.BufferedImage;
นำเข้า java.io.File;
นำเข้า java.io.FileInputStream;
นำเข้า java.io.IOException;
นำเข้า java.util.Date;
นำเข้า java.util.Iterator;
นำเข้า javax.imageio.ImageIO;
นำเข้า javax.imageio.ImageReadParam;
นำเข้า javax.imageio.ImageReader;
นำเข้า javax.imageio.stream.ImageInputStream;
-
* @วันที่ 26-11-2555
* @ผู้เขียน 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 พิกัดของจุดเฉือน
-
ส่วนตัว int x;
-
* พิกัด Y ของจุดตัด
-
เอกชน int y;
-
* ความกว้างของจุดตัด
-
ความกว้าง int ส่วนตัว
-
* ความสูงของจุดตัด
-
ความสูง int ส่วนตัว
ImageCut สาธารณะ () {
-
ImageCut สาธารณะ (int x, int y, ความกว้าง int, int height) {
นี่.x = x;
นี่.y = y;
this.width = ความกว้าง;
this.height = ความสูง;
-
โมฆะคงที่สาธารณะ main (String [] args) พ่นข้อยกเว้น {
ImageCut imageCut = ImageCut ใหม่ (134, 0, 366, 366);
imageCut.cut(imageCut.getSrcpath(), imageCut.getSubpath());
-
-
* ส่งคืน Iterator ที่มี ImageReaders ที่ลงทะเบียนในปัจจุบันทั้งหมดที่อ้างว่าสามารถถอดรหัสรูปแบบที่ระบุได้
* พารามิเตอร์: formatName - มีชื่อรูปแบบที่ไม่เป็นทางการ (เช่น "jpeg" หรือ "tiff") เป็นต้น
-
* @param postFix
* นามสกุลไฟล์
* @กลับ
-
Iterator สาธารณะ <ImageReader> getImageReadersByFormatName (String postFix) {
สวิตช์ (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
-
การตัดโมฆะสาธารณะ (String srcpath, String subpath) พ่น IOException {
FileInputStream คือ = null;
ImageInputStream iis = null;
พยายาม {
//อ่านไฟล์รูปภาพ
คือ = FileInputStream ใหม่ (srcpath);
// รับชื่อส่วนต่อท้ายของไฟล์
สตริง postFix = getPostfix(srcpath);
System.out.println("รูปแบบรูปภาพคือ: " + postFix);
-
* ส่งคืน Iterator ที่มี ImageReaders ที่ลงทะเบียนในปัจจุบันทั้งหมดที่อ้างว่าสามารถถอดรหัสรูปแบบที่ระบุได้
* พารามิเตอร์: formatName - มีชื่อรูปแบบที่ไม่เป็นทางการ (เช่น "jpeg" หรือ "tiff") เป็นต้น
-
ตัววนซ้ำ <ImageReader> it = getImageReadersByFormatName(postFix);
เครื่องอ่าน ImageReader = it.next();
// รับสตรีมรูปภาพ
iis = ImageIO.createImageInputStream (คือ);
-
* <p>iis:อ่าน source.true:ค้นหาไปข้างหน้าเท่านั้น</p> ทำเครื่องหมายเป็น 'ค้นหาไปข้างหน้าเท่านั้น'
* การตั้งค่านี้หมายความว่ารูปภาพที่อยู่ในแหล่งอินพุตจะถูกอ่านตามลำดับเท่านั้น ซึ่งอาจช่วยให้ผู้อ่านหลีกเลี่ยงการแคชส่วนอินพุตเหล่านั้นที่มีข้อมูลที่เกี่ยวข้องกับรูปภาพที่เคยอ่านก่อนหน้านี้
-
reader.setInput(iis, จริง);
-
* <p>คลาสที่อธิบายวิธีการถอดรหัสสตรีม<p> ใช้เพื่อระบุวิธีการถอดรหัสสตรีมจาก Java Image I/O บนอินพุต
* สตรีมแปลงรูปภาพหรือชุดรูปภาพในบริบทของเฟรม ปลั๊กอินสำหรับรูปแบบภาพเฉพาะจะถูกนำมาใช้จาก ImageReader
* วิธีการ getDefaultReadParam ส่งคืนอินสแตนซ์ของ ImageReadParam
-
พารามิเตอร์ ImageReadParam = reader.getDefaultReadParam();
-
* พื้นที่ครอบตัดรูปภาพ สี่เหลี่ยมผืนผ้าระบุพื้นที่ในพื้นที่พิกัดผ่านวัตถุสี่เหลี่ยมผืนผ้า
* พิกัด (x, y) ความกว้างและความสูงของจุดยอดซ้ายบนสามารถกำหนดพื้นที่นี้ได้
-
สี่เหลี่ยมผืนผ้าสี่เหลี่ยมผืนผ้า = สี่เหลี่ยมผืนผ้าใหม่ (x, y, ความกว้าง, ความสูง);
// จัดเตรียม BufferedImage เพื่อใช้เป็นเป้าหมายในการถอดรหัสข้อมูลพิกเซล
param.setSourceRegion (ตรง);
-
* ใช้ ImageReadParam ที่ให้มาเพื่ออ่านวัตถุที่ระบุโดยดัชนี imageIndex และถือว่าเป็นวัตถุที่สมบูรณ์
* BufferedImage ส่งคืน
-
BufferedImage bi = reader.read(0, พารามิเตอร์);
//บันทึกภาพใหม่
ImageIO.write(bi, postFix, ไฟล์ใหม่ (เส้นทางย่อย + "_" + วันที่ใหม่ ().getTime() + "." + postFix));
} ในที่สุด {
ถ้า (เป็น != null)
คือ.ปิด();
ถ้า (iis != null)
iis.ปิด();
-
-
-
* รับชื่อส่วนต่อท้ายของ inputFilePath เช่น: ชื่อส่วนต่อท้ายของ "e:/test.pptx" คือ: "pptx"<br>
-
* @param inputFilePath
* @กลับ
-
สตริงสาธารณะ getPostfix (สตริง inputFilePath) {
ส่งคืน inputFilePath.substring (inputFilePath.lastIndexOf (".") + 1);
-
สาธารณะ int getHeight() {
ความสูงกลับ;
-
โมฆะสาธารณะ setHeight (ความสูง int) {
this.height = ความสูง;
-
สตริงสาธารณะ getSrcpath() {
กลับ srcpath;
-
โมฆะสาธารณะ setSrcpath (สตริง srcpath) {
นี้.srcpath = srcpath;
-
สตริงสาธารณะ getSubpath() {
เส้นทางย่อยกลับ;
-
โมฆะสาธารณะ setSubpath (เส้นทางย่อยสตริง) {
this.subpath = เส้นทางย่อย;
-
สาธารณะ int getWidth() {
ความกว้างกลับ;
-
โมฆะสาธารณะ setWidth (ความกว้าง int) {
this.width = ความกว้าง;
-
สาธารณะ int getX() {
กลับ x;
-
โมฆะสาธารณะ setX (int x) {
นี่.x = x;
-
สาธารณะ int getY() {
กลับ y;
-
โมฆะสาธารณะ setY (int y) {
นี่.y = y;
-
-