บทความนี้เป็นคลาสการประมวลผลภาพ Java ที่ถูกห่อหุ้มโดยผู้เขียนร่วมกับข้อมูลบางอย่างบนอินเทอร์เน็ตสนับสนุนการปรับขนาดการหมุนและการทำโมเสคของภาพ
โดยไม่ต้องกังวลใจเพิ่มเติมรหัส:
ข้อตกลงแพ็คเกจนำเข้า java.awt.color; นำเข้า java.awt.graphics; นำเข้า java.awt.graphics2d; นำเข้า java.awt.image; นำเข้า java.awt.eom.affinetransform; นำเข้า Java.Awt.Image.Affinetransformop; javax.imageio.imageio;/*** คลาสการประมวลผลภาพ * * @author nagsh * */คลาสสาธารณะ imagedeal {String openUrl; // รูปแบบต้นฉบับเปิดพา ธ สตริง SAVEURL; // ภาพใหม่บันทึกภาพเส้นทาง Savename; // คำต่อท้ายสตริงชื่อภาพใหม่; // ประเภทภาพใหม่เท่านั้นที่รองรับ GIF, JPG, PNG Public Imagedeal (String OpenUrl, String SaveUrl, String Savename, String Suffix) {this.openurl = openUrl; this.savename = savename; this.saveurl = saveurl; this.suffix = คำต่อท้าย; } /*** การปรับขนาดภาพ * * ความกว้าง @param * ความกว้างที่ต้องการ * ความสูง @param * ความสูงที่ต้องการ * @throws ยกเว้น */ การซูมโมฆะสาธารณะ (ความกว้าง int, ความสูง int) พ่นข้อยกเว้น {double sx = 0.0; double sy = 0.0; ไฟล์ไฟล์ = ไฟล์ใหม่ (openUrl); if (! file.isfile ()) {โยนข้อยกเว้นใหม่ ("imagedeal >>>" + ไฟล์ + "ไม่ใช่ไฟล์รูปภาพ!"); } bufferedImage bi = imageio.read (ไฟล์); // อ่านภาพ // คำนวณอัตราส่วนการปรับสเกลแกน X แกนแกน-ถ้าจำเป็นต้องมีการปรับสเกลในระดับที่เท่ากันตรวจสอบให้แน่ใจว่าความกว้างของพารามิเตอร์และความสูงคือการเปลี่ยนแปลงระดับเท่ากันก่อนโทร = (สองเท่า) ความกว้าง/ bi.getWidth (); sy = (สองเท่า) ความสูง / bi.getheight (); affineTransformop op = new affineTransformop (affineTransform.getScaleInstance (SX, SY), NULL); ไฟล์ sf = ไฟล์ใหม่ (saveurl, savename + "." + คำต่อท้าย); image zoomimage = op.filter (bi, null); ลอง {imageio.write ((bufferedImage) zoomimage, ต่อท้าย, sf); // บันทึกภาพ} catch (exception e) {e.printstacktrace (); }} / ** * หมุน * * @param องศา * การหมุนมุม * @throws ยกเว้น * / โมฆะสาธารณะสปิน (ระดับ int) พ่นข้อยกเว้น {int swidth = 0; // ความกว้างหลังจากการหมุน int sheight = 0; // ความสูงหลังจากการหมุน int x; // ต้นกำเนิดพิกัดแนวนอน int y; // ไฟล์พิกัดแนวตั้งต้นกำเนิดไฟล์ = ไฟล์ใหม่ (openUrl); if (! file.isfile ()) {โยนข้อยกเว้นใหม่ ("imagedeal >>>" + ไฟล์ + "ไม่ใช่ไฟล์รูปภาพ!"); } bufferedImage bi = imageio.read (ไฟล์); // อ่านภาพ // การหมุนระดับการหมุนมุม-กระบวนการ = องศา % 360; ถ้า (องศา <0) องศา = 360 + องศา; // แปลงมุมเป็นระหว่าง 0-360 องศา theta = math.toradians (องศา); // แปลงมุมเป็นเรเดียน // กำหนดความกว้างและความสูงหลังจากการหมุนถ้า (องศา == 180 || องศา == 0 || sheight = bi.getheight (); } อื่นถ้า (องศา == 90 || degree == 270) {sheight = bi.getWidth (); swidth = bi.getheight (); } else {swidth = (int) (math.sqrt (bi.getWidth () * bi.getWidth () + bi.getheight () * bi.getheight ())); sheight = (int) (math.sqrt (bi.getWidth () * bi.getWidth () + bi.getheight ())); } x = (swidth / 2) - (bi.getWidth () / 2); // กำหนดพิกัดต้นกำเนิด y = (shight / 2) - (bi.getheight () / 2); bufferedImage spinimage = bufferedImage ใหม่ (Swidth, Sheight, Bi.getType ()); // ตั้งค่าสีพื้นหลังของภาพกราฟิก 2D GS = (กราฟิก 2D) spinimage.getGraphics (); gs.setcolor (color.white); gs.fillrect (0, 0, Swidth, Sheight); // วาดพื้นหลังของภาพที่หมุนได้ในการเสริมสีที่กำหนดที่ = new affineTransform (); AT.ROTATE (Theta, Swidth / 2, Sheight / 2); // หมุนภาพ at.translate (x, y); affineTransformop op = new affineTransformop (AT, affineTransformop.type_bicubic); spinimage = op.filter (bi, spinimage); ไฟล์ sf = ไฟล์ใหม่ (saveurl, savename + "." + คำต่อท้าย); Imageio.write (spinimage, ต่อท้าย, SF); // บันทึกภาพ} /*** โมเสก * @param ขนาดโมเสกขนาดนั่นคือความยาวและความกว้างของแต่ละสี่เหลี่ยมผืนผ้า * @return * @throws ยกเว้น */ โมเสคบูลีนสาธารณะ (ขนาด int) พ่นข้อยกเว้น {ไฟล์ไฟล์ = ไฟล์ใหม่ (openUrl); if (! file.isfile ()) {โยนข้อยกเว้นใหม่ ("imagedeal >>>" + ไฟล์ + "ไม่ใช่ไฟล์รูปภาพ!"); } bufferedImage bi = imageio.read (ไฟล์); // อ่าน image bufferedImage spinimage = new bufferedImage (bi.getWidth (), bi.getheight (), bi.type_int_rgb); if (bi.getWidth () <size || bi.getheight () <size || size <= 0) {// ขนาดของกริดโมเสคมีขนาดใหญ่เกินไปหรือเล็กเกินไปส่งคืนเท็จ; } int xcount = 0; // จำนวนทิศทางถูกวาด int ycount = 0; // จำนวนทิศทางถูกวาดใน ycount ถ้า (bi.getWidth () % size == 0) {xcount = bi.getWidth () / ขนาด; } else {xcount = bi.getWidth () / ขนาด + 1; } if (bi.getheight () % size == 0) {ycount = bi.getheight () / ขนาด; } else {ycount = bi.getheight () / ขนาด + 1; } int x = 0; // พิกัด int y = 0; // วาดโมเสก (วาดรูปสี่เหลี่ยมและเติมสี) กราฟิก gs = spinimage.getGraphics (); สำหรับ (int i = 0; i <xcount; i ++) {สำหรับ (int j = 0; j <ycount; j ++) {// ขนาดสี่เหลี่ยมผืนผ้าโมเสคขนาด int mwidth = ขนาด; int mheight = size; if (i == xcount-1) {// อันสุดท้ายในทิศทางแนวนอนเป็นพิเศษและอาจไม่เพียงพอสำหรับหนึ่งขนาด mwidth = bi.getWidth ()-x; } if (j == ycount-1) {// ในทำนองเดียวกัน mheight = bi.getheight ()-y; } // ค่า RGB ของสีสี่เหลี่ยมผืนผ้าใช้พิกเซลกลาง int centerx = x; int centery = y; if (mWidth % 2 == 0) {centerx += mWidth / 2; } else {centerx += (mwidth - 1) / 2; } if (mheight % 2 == 0) {Centery += mheight / 2; } else {Centery += (mheight - 1) / 2; } color color = สีใหม่ (bi.getRgb (centerx, centery)); gs.setColor (สี); gs.fillrect (x, y, mwidth, mheight); y = y + size; // คำนวณพิกัด y ของสี่เหลี่ยมต่อไป} y = 0; // คืนค่าพิกัด y x = x + ขนาด; // คำนวณพิกัด x} gs.dispose (); ไฟล์ sf = ไฟล์ใหม่ (saveurl, savename + "." + คำต่อท้าย); Imageio.write (spinimage, ต่อท้าย, SF); // บันทึกภาพส่งคืนจริง; } โมฆะคงที่สาธารณะหลัก (สตริง [] args) โยนข้อยกเว้น {imagedeal imagedeal = ใหม่ imagedeal ("e: //1.jpg", "e: //", "2", "jpg"); // ทดสอบสเกล/* imagedeal.zoom (200, 300); */ // ทดสอบการหมุน/* imagedeal.spin (90); */ // ทดสอบ mosaic/*imagedeal.mosaic (4);*/}}} ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น