ก่อนอื่นมาดูวิธีสร้างรหัสการตรวจสอบรูปภาพในเครื่องแล้วเขียนเอาต์พุตรหัสการตรวจสอบไปยังหน้าเว็บเพื่อนำไปใช้
ก่อนอื่นให้ดูที่ฟังก์ชั่นที่ง่ายที่สุด - การใช้งานคือการเปลี่ยนสตริงเป็นภาพและเขียนลงในไฟล์
รหัสการใช้งาน:
แพ็คเกจ cn.hncu.img; นำเข้า java.awt.graphics; นำเข้า java.awt.image.bufferedimage; นำเข้า java.io.filenotfoundException; นำเข้า Java.io.fileoutputstream; นำเข้า java.io.ioException; Imagewriter และการเข้ารหัสและถอดรหัสอย่างง่าย ๆ นำเข้า org.junit.test; คลาสสาธารณะ imgdemo {// เรียนรู้วิธีการเปลี่ยนสตริงให้เป็นภาพและเขียนไปยังไฟล์ @Test โมฆะสาธารณะ imgdemo1 () โยน filenotfoundException, iOexception {bufferedImage img = bufferedimage ใหม่ // หมายถึงภาพที่มีส่วนประกอบสี RGB 8 บิตของพิกเซลจำนวนเต็มสังเคราะห์ กราฟิก g = img.getGraphics (); G.DrawString ("สวัสดี", 10,20); // วาดข้อความที่กำหนดโดยสตริงที่ระบุโดยใช้ตัวอักษรปัจจุบันและสีของบริบทกราฟิกนี้ พื้นฐานของอักขระซ้ายสุดอยู่ที่ตำแหน่ง (x, y) ของระบบพิกัดบริบทกราฟนี้ G.Dispose (); //// คล้ายกับปิด () ในสตรีมมันขับเคลื่อน Flush () --- กะพริบข้อมูลลงในวัตถุ IMG // ปล่อยบริบทของกราฟนี้และทรัพยากรระบบทั้งหมดที่ใช้ หลังจากโทรออกแล้วคุณไม่สามารถใช้วัตถุกราฟิกได้อีกต่อไป imageio.write (img, "jpg", ใหม่ fileOutputStream ("img/a.jpg")); // เขียนภาพเพื่อไฟล์โดยใช้ Imagewriter ใด ๆ ที่รองรับรูปแบบที่กำหนด -ผลลัพธ์:
ข้างต้นนั้นง่ายมากใช่มั้ย รหัสการยืนยันที่เราเห็นไม่เป็นเช่นนี้ โอเคเพิ่มเส้นรบกวนสีพื้นหลังตัวละครและพิกัด y ลงไป
รหัสการตรวจสอบที่มีบรรทัดสัญญาณรบกวนและสีพื้นหลัง - เขียนถึงไฟล์
รหัสสาธิต:
แพ็คเกจ cn.hncu.img; นำเข้า java.awt.color; นำเข้า java.awt.font; นำเข้า java.awt.graphics; นำเข้า java.awt.image.bufferedimage; นำเข้า java.io.filenotfoundexception; java.util.random; นำเข้า Javax.imageio.imageio; // คลาสนี้มีบางอย่างที่ใช้ในการค้นหา imageReader และ Imagewriter และวิธีการคงที่และสะดวกในการดำเนินการเข้ารหัสและถอดรหัสอย่างง่าย นำเข้า org.junit.test; คลาสสาธารณะ IMGDEMO {// เปลี่ยนสตริงด้านบนเป็นรหัสการตรวจสอบที่เรามักจะใช้ - สร้างตัวเลขสุ่มหลายตัวด้วยสีพื้นหลังและเส้นรบกวน @Test โมฆะสาธารณะ IMGDEMO2 () โยน fileNotFoundException, iOException {int width = 80; ความสูง int = 40; int lines = 10; bufferedImage img = bufferedImage ใหม่ (ความกว้าง, ความสูง, bufferedImage.type_int_rgb); กราฟิก g = img.getGraphics (); // ตั้งค่าสีพื้นหลัง g.setColor (color.white); G.FillRect (0, 0, ความกว้าง, ความสูง); // วาดพื้นหลัง // เติมสี่เหลี่ยมที่ระบุ เติมสี่เหลี่ยมด้วยสีปัจจุบันของบริบทกราฟิก // ตั้งค่าตัวอักษร g.setfont (ตัวอักษรใหม่ ("宋体", font.bold, 18)); // หมายเลขสุ่มวันที่ d = วันที่ใหม่ (); //system.out.println (d.getTime ()); สุ่ม r = ใหม่สุ่ม (d.getTime ()); สำหรับ (int i = 0; i <4; i ++) {int a = r.nextint (10); // โปรดจำนวนเต็มภายใน 10 [0, 9] int y = 10+r.nextint (20); // จำนวนเต็มในช่วง 10 ~ 30 เป็นสีพิกัด y สี C = สีใหม่ (R.Neextint (255), R.Nextint (255), R.Neextint (255)); G.SetColor (C); G.DrawString (""+a, 5+i*ความกว้าง/4, y); } // บรรทัดสัญญาณรบกวนสำหรับ (int i = 0; i <lines; i ++) {color c = สีใหม่ (R.Nextint (255), R.Nextint (255), R.Neextint (255)); G.SetColor (C); G.Drawline (R.Neextint (ความกว้าง), R.Nextint (ความสูง), R.Neextint (ความกว้าง), R.Nextint (ความสูง)); } G.Dispose (); // คล้ายกับปิด () ในสตรีมไดรฟ์ฟลัช () --- ข้อมูลแฟลชลงใน IMG Object Imageio.write (img, "jpg", ใหม่ fileOutputStream ("img/b.jpg")); -ผลการสาธิต:
สุดท้ายมาดูรหัสการตรวจสอบที่สามารถหมุนและปรับขนาดได้ - เขียนลงในไฟล์ท้องถิ่นของรูปภาพ
รหัสสาธิต:
แพ็คเกจ cn.hncu.img; นำเข้า java.awt.color; นำเข้า java.awt.font; นำเข้า java.awt.graphics; นำเข้า java.awt.graphics2d นำเข้า java.awt.geom.affinetransform; java.io.FileOutputStream; นำเข้า java.io.ioException; นำเข้า java.util.date นำเข้า java.util.random; นำเข้า Javax.imageio.imageio; // คลาสนี้มีวิธีการคงที่และสะดวกสำหรับการค้นหา imageReader นำเข้า org.junit.test; คลาสสาธารณะ imgdemo { @test // รหัสการตรวจสอบที่สามารถหมุนและซูมโมฆะสาธารณะ imgdemo3 () โยน filenotfoundexception, ioexception {int width = 80; ความสูง int = 40; int lines = 10; bufferedImage img = bufferedImage ใหม่ (ความกว้าง, ความสูง, bufferedImage.type_int_rgb); graphics2d g2d = (graphics2d) img.getGraphics (); g2d.setFont (ตัวอักษรใหม่ ("宋体", font.bold, 20)); สุ่ม r = ใหม่สุ่ม (วันที่ใหม่ (). getTime ()); // ตั้งค่าสีพื้นหลัง g2d.setColor (สีใหม่ (R.Nextint (255), R.Nextint (255), R.NEXTINT (255))); G2D.DrawRect (0, 0, ความกว้าง, ความสูง); // วาดเส้นขอบของสี่เหลี่ยมผืนผ้าที่ระบุ G2D.SetColor (สีใหม่ (R.Nextint (255), R.Neextint (255), R.Neextint (255))); g2d.fillrect (0, 0, ความกว้าง, ความสูง); // เติมสี่เหลี่ยมผืนผ้าที่ระบุ สำหรับ (int i = 0; i <4; i ++) {string str = ""+r.nextint (10); // การประมวลผลการหมุนรอบตัวปรับ tx = new affineTransform (); tx.rotate (math.random (), 5+i*15, ความสูง -5); // มุมการหมุนที่วัดได้ด้วยเรเดียน X พิกัดของสมอการหมุนและพิกัด y ของจุดยึดการหมุน //tx.scale (0.7+Math.random (), 0.7+Math.random ()); // การปรับสเกลหลายตัวในทิศทางพิกัด x การปรับหลายตัวในทิศทางพิกัด y ทิศทาง g2d.setTransform (TX); Color C = สีใหม่ (R.Nextint (255), R.Nextint (255), R.Neextint (255)); G2D.SetColor (C); g2d.DrawString (str, 2+i*ความกว้าง/4, ความสูง -13); } // บรรทัดสัญญาณรบกวนสำหรับ (int i = 0; i <lines; i ++) {color c = สีใหม่ (R.Nextint (255), R.Nextint (255), R.Neextint (255)); G2D.SetColor (C); g2d.drawline (R.Nextint (ความกว้าง), R.Nextint (ความสูง), R.Nextint (ความกว้าง), R.Nextint (ความสูง)); } g2d.dispose (); imageio.write (img, "jpg", ใหม่ fileOutputStream ("img/c.jpg")); -ผลการสาธิต:
ตอนนี้เราจะเริ่มแสดงเทคโนโลยีการตรวจสอบภาพแผนกต้อนรับ
เทคโนโลยีการตรวจสอบภาพแผนกต้อนรับส่วนหน้า
แผนผังโครงสร้างของโครงการนี้:
index.jsp:
<%@ page language = "java" import = "java.util.*" pageencoding = "utf-8"%> <! doctype html สาธารณะ "-// w3c // dtd html 4.01 transitional // en"> <html> <head> document.getElementById ("servletimg"); var d = วันที่ใหม่ (); var time = d.getTime (); // หากไม่มี // ประโยคต่อไปนี้จะไม่ทำงานเพราะเทคโนโลยีการแคชของเบราว์เซอร์ภาพจะไม่ถูกรีเฟรช //img.src="/myhelloweb/servlet/imageservlet "; img.src = "/myhelloweb/servlet/imageservlet?"+เวลา; // สิ่งที่อยู่เบื้องหลังหมายเลขจะถูกส่งผ่าน Get} </script> </head> <body> นี่คือโฮมเพจคู่มือของฉัน! <br/> <img id = "servletimg" src = "/myhelloweb/servlet/imageservlet"/> <a href = "javascript: changimg ()"> ไม่ชัดเจน </a> </body> </html>web.xml:
<? xml เวอร์ชัน = "1.0" การเข้ารหัส = "utf-8"?> <web-app version = "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http://ww.w3.org/200 xsi: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_3 <Scription> นี่คือคำอธิบายของส่วนประกอบ J2EE ของฉัน </คำอธิบาย> <จอแสดงผล-ชื่อ> นี่คือชื่อที่แสดงของส่วนประกอบ j2ee ของฉัน </display-name> <servlet-name> icage imageservlet </servlet-name> <servlet-class> cn.hncu.img.imagelet <url-pattern>/servlet/imageservlet </url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file> index.jsp </welcome-file>
imageservlet.java
แพ็คเกจ cn.hncu.img; นำเข้า java.awt.color; นำเข้า java.awt.font; นำเข้า java.awt.graphics; นำเข้า java.awt.image.bufferedimage; นำเข้า Java.io.ioexception; นำเข้า Java.io.printwriter; javax.imageio.imageio; นำเข้า javax.servlet.servletexception; นำเข้า Javax.servlet.http.httpservlet; นำเข้า Javax.servlet.http.httpservletrequest; DOGET (HTTPSERVLETREQUEST Request, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {dopost (คำขอ, การตอบกลับ); } โมฆะสาธารณะ dopost (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {// บอกลูกค้าว่ารูปแบบการตอบสนองการส่งออก setContentType ("image/jpeg"); ความกว้าง int = 80; ความสูง int = 40; int lines = 10; bufferedImage img = bufferedImage ใหม่ (ความกว้าง, ความสูง, bufferedImage.type_int_rgb); กราฟิก g = img.getGraphics (); // ตั้งค่าสีพื้นหลัง g.setColor (color.white); G.FillRect (0, 0, ความกว้าง, ความสูง); // ตั้งค่าตัวอักษร g.setfont (ตัวอักษรใหม่ ("宋体", font.bold, 20)); // สุ่มสุ่ม r = ใหม่สุ่ม (วันที่ใหม่ (). getTime ()); สำหรับ (int i = 0; i <4; i ++) {int a = r.nextint (10); int y = 10+r.nextint (20); // จำนวนเต็มในช่วง 10 ~ 30 เป็นสีพิกัด y สี C = สีใหม่ (R.Neextint (255), r.nextint (255), R.Neextint (255)); G.SetColor (C); G.DrawString (""+a, 5+i*ความกว้าง/4, y); } // บรรทัดสัญญาณรบกวนสำหรับ (int i = 0; i <lines; i ++) {color c = สีใหม่ (r.nextint (255), r.nextint (255), r.nextint (255)); G.SetColor (C); G.Drawline (R.Neextint (ความกว้าง), R.Nextint (ความสูง), R.Neextint (ความกว้าง), R.Nextint (ความสูง)); } G.Dispose (); // คล้ายกับปิด () ในสตรีม, Drive Flush () --- ข้อมูลแฟลชลงใน IMG Object Imageio.write (IMG, "JPG", Response.getOutputStream ()); -ผลการสาธิต:
ต่อไปนี้อยู่ใน index.jsp:
หากใช้ประโยคนี้:
img.src =”/myhelloweb/servlet/imageservlet”;
คุณสามารถตรวจสอบส่วนหัวการตอบกลับ:
มาดูส่วนหัวการตอบกลับโดยใช้ประโยคนี้:
img.src =”/myhelloweb/servlet/imageservlet?”+เวลา;
มีการตอบกลับวันที่พิเศษ!
เนื่องจากเวลามีการเปลี่ยนแปลงทุกครั้งที่ฉันคลิกเพื่อดูฉันจะขอมันไปยังเซิร์ฟเวอร์อีกครั้งและฉันจะไม่หยุดขอเพราะแคชของเบราว์เซอร์
รหัสการตรวจสอบสิ้นสุดที่นี่
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น