เมื่อเร็ว ๆ นี้ฉันกำลังดำเนินการตามข้อกำหนดในการถ่ายภาพจากฐานข้อมูล แต่รูปภาพมีพื้นหลังสีขาวดังนั้นทีมงานโครงการหวังที่จะลบพื้นหลังสีขาวของภาพ
บทความนี้แบ่งปันวิธีการลบพื้นหลังสีขาวออกจากรูปภาพโดย Java สำหรับการอ้างอิงของคุณ เนื้อหาเฉพาะมีดังนี้
ดังแสดงในรูป:
แน่นอนว่ามันไม่สามารถมองเห็นได้ในเรื่องนี้ ในความเป็นจริงภาพแรกมีพื้นหลังสีขาว แต่ภาพที่สองไม่ได้ ฉันเชื่อว่าคุณเข้าใจสิ่งที่ฉันพูดดังนั้นฉันควรใช้รหัสนี้อย่างไร:
แพ็คเกจ com.wdg.util; นำเข้า java.awt.graphics2d; นำเข้า java.awt.image; นำเข้า java.awt.image.bufferedimage; นำเข้า Java.io.ByTeArrayOutputStream; นำเข้า Java.io.File; นำเข้า Java.io.FileInputStream; นำเข้า Java.io.InputStream; นำเข้า Javax.imageio.imageio; นำเข้า Javax.swing.imageicon; คลาสสาธารณะ ImageUtil {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {transferalpha (); } สาธารณะคงที่สาธารณะ [] transferAlpha () {byteArrayOutputStream byteArrayOutputStream = ใหม่ byteArrayOutputStream (); ไฟล์ไฟล์ = ไฟล์ใหม่ ("D: //08//11.png"); อินพุตสตรีมคือ; ลอง {IS = ใหม่ FileInputStream (ไฟล์); // ถ้ามันเป็นประเภท multipartfile ก็ยังมีวิธีการแปลงเป็นสตรีม: is = file.getInputStream (); bufferedImage bi = imageio.read (IS); Image image = (image) bi; imageicon imageicon = imageicon ใหม่ (ภาพ); bufferedImage bufferedImage = bufferedImage ใหม่ (imageicon.geticonwidth (), imageicon.geticonheight (), bufferedimage.type_4byte_abgr); graphics2d g2d = (graphics2d) bufferedimage.getGraphics (); G2D.DrawImage (imageicon.getImage (), 0, 0, imageicon.getimageobserver ()); int alpha = 0; สำหรับ (int j1 = bufferedimage.getMiny (); j1 <bufferedimage.getheight (); j1 ++) {สำหรับ (int j2 = bufferedimage.getMinx (); j2 <bufferedimage.getWidth (); j2 ++) int r = (rgb & 0xff0000) >> 16; int g = (rgb & 0xff000) >> 8; int b = (rgb & 0xff); if (((255 - r) <30) && ((255 - g) <30) && ((255 - b) <30)) {rgb = ((alpha + 1) << 24) | (RGB & 0x00ffffff); } bufferedImage.setRgb (J2, J1, RGB); }} g2d.DrawImage (bufferedImage, 0, 0, imageicon.getimageobserver ()); Imageio.write (bufferedImage, "png", ไฟล์ใหม่ ("d: //08//12.png")); // ไฟล์เอาต์พุตโดยตรง} catch (Exception e) {E.printstackTrace (); } ในที่สุด {} return byteArrayOutputStream.tobyteArray (); - รหัสทำงานบนรูปภาพและการคัดลอกสามารถใช้ฟังก์ชั่นของคุณได้โดยตรง
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น