Schauen wir uns zunächst an, wie Sie den Bildüberprüfungscode lokal generieren und dann die Ausgabe des Verifizierungscodes auf die Webseite schreiben, um ihn zu implementieren.
Schauen wir uns zunächst die einfachste Funktion an - die Implementierung besteht darin, einen String in ein Bild zu verwandeln und in eine Datei zu schreiben.
Implementierungscode:
Paket cn.hncu.img; import Java.awt.graphics; Import Java.awt.image.BuffenedImage; Import Java.io.filenotFoundException; Import Java.io.fileOutputStream; Import Java.io.ioxception. Einfache Codierung und Dekodierung durchführen. Importieren org.junit.test; public class imgdemo {// Erfahren Sie, wie man einen String in ein Bild verwandelt und in eine Datei schreibt @test public void imgdemo1 () löst FilenotfoundException aus, ioException {bufferedimage img = new bufferedimage (60, 30, bufperedimage.type_int_rgb); // repräsentiert ein Bild mit 8-Bit-RGB-Farbkomponenten synthetischer Ganzzahl-Pixel. Grafik g = img.getGraphics (); G.Drawstring ("Hallo", 10,20); // Zeichnen Sie den von der angegebenen Zeichenfolge angegebenen Text mit der aktuellen Schriftart und der Farbe dieses grafischen Kontextes. Die Grundlinie des Charakters des linken meistens befindet sich an der (x, y) Position dieses Graphenkontextkoordinatensystems. g.disponse (); //// ähnlich wie bei close () im Stream fährt es Flush () --- Die Daten in das IMG-Objekt blitzt // den Kontext dieses Diagramms und alle von ihnen verwendeten Systemressourcen freigelassen. Nach dem Aufrufen von Entäuser können Sie das Grafikobjekt nicht mehr verwenden. Imageio.write (IMG, "JPG", neuer FileOutputStream ("img/a.jpg")); // Schreiben Sie ein Bild in Datei mit einem ImageWriter, der das angegebene Format unterstützt. }}Ergebnis:
Das obige ist sehr einfach, oder? Der Verifizierungscode, den wir sehen, ist nicht so. Ok, fügen wir einige Interferenzlinien, Hintergrundfarbe, Zeichen und Y -Koordinaten hinzu.
Überprüfungscode mit Interferenzzeilen und Hintergrundfarben - Schreiben Sie in Datei
Democode:
Paket cn.Hncu.img; Import Java.awt.Color; Import Java.awt.font; Import Java.awt.graphics; Import Java.awt.image.BuffeedImage; Import Java.io.io.filenotFoundException; Import Java.ioTiltil.ioTil. java.util.random; import javax.imageio.imageo; // Diese Klasse enthält einige, die zum Finden von Imagleräern und im Bildwriter sowie statischen und bequemen Methoden verwendet werden, um eine einfache Kodierung und Dekodierung durchzuführen. import org.junit.test; public class imgdemo {// die obige Zeichenfolge in den Verifizierungscode ändern, den wir normalerweise verwenden - generieren Sie mehrere Zufallszahlen, mit Hintergrundfarbe und Interferenzzeilen @test public void imgDemo2 () löscht FilenotFoundException, IoException {int width = 80; int Höhe = 40; int line = 10; BufferedImage img = new bufferedImage (Breite, Höhe, bufferedimage.type_int_rgb); Grafik g = img.getGraphics (); // Setzen Sie die Hintergrundfarbe G.SetColor (color.white); G.FillRect (0, 0, Breite, Höhe); // Zeichnen Sie den Hintergrund // Füllen Sie das angegebene Rechteck. Füllen Sie das Rechteck mit der aktuellen Farbe des grafischen Kontextes // Setzen Sie die Schriftart G.Setfont (neue Schriftart ("宋体", font.bold, 18)); // Zufallsnummer Datum d = neuer Datum (); //System.out.println (D.GetTime ()); Zufällig r = neu zufällig (D.GetTime ()); für (int i = 0; i <4; i ++) {int a = r.Nextint (10); // bitte eine Ganzzahl innerhalb von 10 [0, 9] int y = 10+r.Nextint (20); // eine Ganzzahl im Bereich 10 ~ 30, wie die y -Koordinatenfarbe c = neue Farbe (R.Nextint (255), R.Nextint (255), R.Nextint (255)); G.SetColor (c); g.drawstring (""+a, 5+i*width/4, y); } // Interferenzlinie für (int i = 0; i <line; i ++) {color c = new color (r.Nextint (255), R.Nextint (255), R.Nextint (255)); G.SetColor (c); G.Drawline (R.Nextint (Breite), R.Nextint (Höhe), R.Nextint (Breite), R.Nextint (Höhe)); } g.dispose (); // ähnlich wie close () im Stream fährt Flush () --- Flash-Daten in das IMG-Objekt imageIO.Write (IMG, "JPG", neuer FileOutputStream ("IMG/B.JPG")); }}Demonstrationsergebnisse:
Schauen wir uns schließlich einen Verifizierungscode an, der gedreht und skaliert werden kann. Schreiben Sie ihn in die lokale Datei des Bildes
Democode:
Paket cn.hncu.img; import Java.awt.color; import Java.awt.font; Import Java.awt.graphics; Import Java.awt.graphics2d; Import Java.awt.Geom.afinetransform; Java.io.FileOutputStream; Import Java.io.ioException; import Java.util.date; import Java.util.random; Import Javax.imageio.imageio; // Diese Klasse enthält einige statische und bequeme Methoden, um Imaglerader und Bildschreiber durchzuführen und einfach zu codieren und zu dekodieren und zu dekodieren. import org.junit.test; public class imgdemo { @test // Verifizierungscode, der public void imgDemo3 () rotieren und zoomen kann, löscht FilenotFoundException, IoException {int width = 80; int Höhe = 40; int line = 10; BufferedImage img = new bufferedImage (Breite, Höhe, bufferedimage.type_int_rgb); Graphics2d G2D = (Graphics2d) img.getGraphics (); g2d.setfont (neue Schriftart ("宋体", font.bold, 20)); Zufällig r = neu zufällig (neues Datum (). GetTime ()); // Setzen Sie die Hintergrundfarbe G2D.SetColor (neue Farbe (R.Nextint (255), R.Nextint (255), R.Nextint (255)); G2D.Drawrect (0, 0, Breite, Höhe); // Zeichne den Rand des angegebenen Rechtecks. G2D.SetColor (neue Farbe (R.Nextint (255), R.Nextint (255), R.Nextint (255)); G2D.FillRect (0, 0, Breite, Höhe); // Füllen Sie das angegebene Rechteck. für (int i = 0; i <4; i ++) {String str = ""+r.Nextint (10); // Rotation affinetransform tx = new Affinetransform (); Tx.rotate (math.random (), 5+i*15, height-5); // Der mit Radians gemessene Rotationswinkel, die X -Koordinate des Rotationsankers und die Y -Koordinate des Rotationsankers //tx.Scale (0,7+Math.Random (), 0,7+Math.Random ()); // das Skalieren von Mehrfachmultipern in X -Koordinatenrichtung, das Skalieren von Mehrfach in der y -Koordinatenrichtung G2D.SetTransform (TX); Farbe C = neue Farbe (R.Nextint (255), R.Nextint (255), R.Nextint (255)); g2d.setColor (c); g2d.drawstring (str, 2+i*width/4, Höhe-13); } // Interferenzlinie für (int i = 0; i <line; i ++) {color c = new color (r.Nextint (255), R.Nextint (255), R.Nextint (255)); g2d.setColor (c); g2d.drawline (R.Nextint (Breite), R.Nextint (Höhe), R.Nextint (Breite), R.Nextint (Höhe)); } g2d.disponse (); Imageio.write (IMG, "JPG", neuer FileOutputStream ("IMG/C.JPG")); }}Demonstrationsergebnisse:
Jetzt werden wir die Bildüberprüfung der Rezeption der Rezeption demonstrieren.
Bildverifizierungstechnologie an der Rezeption
Strukturdiagramm dieses Projekts:
index.jsp:
<%@ page Language = "java" import = "java.util. document.getElementById ("servletImg"); var d = neues Datum (); var time = d.getTime (); // Wenn es nicht so ist, dass der folgende Satz nicht funktioniert, da die Caching -Technologie des Browsers nicht aktualisiert wird, wird das Bild nicht aktualisiert //img.src="/myhelloweb/Servlet/imageServlet "; img.src = "/myHelloweb/servlet/magererservlet?"+Zeit; // Das Ding hinter der Nummer wird durch Get} </script> </head> <body> Dies ist meine manuelle Homepage! <br/> <img id = "servletImg" src = "/myhelloweb/servlet/magererservlet"/> <a href = "javaScript: changimg ()"> unklar </a> </body> </html>web.xml:
<? 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_30.xsd" <servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>ImageServlet</servlet-name> <servlet-class>cn.hncu.img.ImageServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ImageServlet</servlet-name> <URL-Muster>/Servlet/Imageservlet </url-pattern> </servlet-mapping> <Welcome-File-List> <Welcome-File> Index.jsp </Welcome-File> </Welcome-File-List> </web-App>
Imageservlet.java
Paket Cn.Hncu.img; Import Java.awt.Color; Import Java.awt.font; Import Java.awt.graphics; Import Java.awt.image.BuffeedImage; Import Java.io.ioxception; javax.imageo.imageo; import javax.servlet.servletException; import javax.servlet.http.httpServlet; import Javax.servlet.http.httpserdRetRetRequest; import Javax.servlet.http.httpletpletPretPletPletRetResponse; DOGGE (httpServletRequest Request, httpServletResponse -Antwort) löst ServletException, IOException {Dopost (Request, Antwort) aus; } public void dopost (httpServletRequest -Anforderung, httpServletResponse -Antwort) löst ServletException aus, iOException {// Sagen Sie dem Client, dass das Ausgabebodus -Antwort.SetContentType ("Image/JPEG"); int width = 80; int Höhe = 40; int line = 10; BufferedImage img = new bufferedImage (Breite, Höhe, bufferedimage.type_int_rgb); Grafik g = img.getGraphics (); // Setzen Sie die Hintergrundfarbe G.SetColor (color.white); G.FillRect (0, 0, Breite, Höhe); // Setzen Sie die Schriftart G.SetFont (neue Schriftart ("宋体", font.bold, 20)); // Zufälliger zufälliger r = neuer zufälliger (neuer Datum (). GetTime ()); für (int i = 0; i <4; i ++) {int a = r.Nextint (10); int y = 10+r.Nextint (20); // eine Ganzzahl im Bereich 10 ~ 30, wie die y -Koordinatenfarbe c = neue Farbe (R.Nextint (255), R.Nextint (255), R.Nextint (255)); G.SetColor (c); g.drawstring (""+a, 5+i*width/4, y); } // Die Interferenzlinie für (int i = 0; i <line; i ++) {color c = new color (R.Nextint (255), R.Nextint (255), R.Nextint (255)); G.SetColor (c); G.Drawline (R.Nextint (Breite), R.Nextint (Höhe), R.Nextint (Breite), R.Nextint (Höhe)); } g.disponse (); // ähnlich wie close () im Stream, Drive Flush () --- Flash-Daten in das IMG-Objekt imageIO.Write (IMG, "JPG", response.getOutputStream ()); }}Demonstrationsergebnisse:
Das Folgende ist in Index.jsp:
Wenn dieser Satz verwendet wird:
img.src = ”/myHelloweb/servlet/Imageservlet”;
Sie können den Antwortheader überprüfen:
Schauen wir uns den Antwortheader mit diesem Satz an:
img.src = ”/myHelloweb/servlet/magererservlet?”+Zeit;
Es gibt eine zusätzliche Datumsantwort!
Da sich die Zeit geändert hat, werde ich jedes Mal, wenn ich klicke, um es zu sehen, ihn erneut zum Server anfordern, und ich werde nicht aufhören, ihn wegen des Cache des Browsers anzufordern.
Der Verifizierungscode endet hier.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.