Pertama, mari kita lihat cara menghasilkan kode verifikasi gambar secara lokal, dan kemudian tulis output kode verifikasi ke halaman web untuk mengimplementasikannya.
Pertama -tama mari kita lihat fungsi paling sederhana - implementasinya adalah mengubah string menjadi gambar dan menulisnya ke file.
Kode Implementasi:
Paket cn.hncu.img; impor java.awt.graphics; impor java.awt.image.bufferedImage; impor java.io.filenotfoundException; impor java.io.imageio fortioner; Import Java.io.ioException; impor javax.imageio.imageio; Imagewriter dan melakukan pengkodean dan decoding sederhana. Impor org.junit.test; kelas publik imgdemo {// Pelajari cara mengubah string menjadi gambar dan menulis ke file @test public void imgdemo1 () melempar filenotfoundException, ioException {bufferedImage img = bufferedimage baru (60, 30, bufferedimage.type_int_intmage) new BufferedImage (60, 30, bufferedimage.type_intedmage) new BufferedImage (60, BufferedImage.Type_INTR_INTR_INK); // mewakili gambar dengan komponen warna RGB 8-bit dari piksel integer sintetis. Grafik g = img.getGraphics (); G.DrawString ("Hello", 10,20); // Gambar teks yang diberikan oleh string yang ditentukan menggunakan font saat ini dan warna konteks grafis ini. Baseline karakter paling kiri terletak pada posisi (x, y) dari sistem koordinat konteks grafik ini. g.dispose (); //// Mirip dengan close () di aliran, ia mendorong flush () --- mem-flash data ke objek IMG // melepaskan konteks grafik ini dan semua sumber daya sistem yang digunakannya. Setelah menelepon buang, Anda tidak dapat lagi menggunakan objek grafis. ImageIo.write (IMG, "JPG", FileOutputStream baru ("img/a.jpg")); // Tulis gambar untuk file menggunakan Imagewriter yang mendukung format yang diberikan. }}hasil:
Di atas sangat sederhana, bukan? Kode verifikasi yang kita lihat tidak seperti ini. OK, mari tambahkan beberapa garis interferensi, warna latar belakang, karakter dan koordinat untuk itu.
Kode verifikasi dengan garis interferensi dan warna latar belakang - tulis ke file
Kode demo:
Paket cn.hncu.img; impor java.awt.color; impor java.awt.font; impor java.awt.graphics; java.awt.image.bufferedImage; impor java.io.filenotfoundException; impor java.io. java.util.random; impor javax.imageio.imageio; // kelas ini berisi beberapa yang digunakan untuk menemukan imagereader dan imagewriter dan metode statis dan nyaman untuk melakukan pengkodean dan decoding sederhana. impor org.junit.test; kelas publik imgdemo {// Ubah string di atas menjadi kode verifikasi yang biasanya kita gunakan - menghasilkan beberapa nomor acak, dengan warna latar belakang dan garis interferensi @test public void imgdemo2 () melempar filenotfoundException, ioException {int width = 80; tinggi int = 40; Int Lines = 10; BufferedImage IMG = BufferedImage baru (lebar, tinggi, bufferedImage.type_int_rgb); Grafik g = img.getGraphics (); // atur latar belakang warna g.setColor (color.white); g.fillrect (0, 0, lebar, tinggi); // Gambarlah latar belakang // Isi persegi panjang yang ditentukan. Isi persegi panjang dengan warna saat ini dari konteks grafis // atur font g.setfont (font baru ("宋体", font.bold, 18)); // tanggal nomor acak d = tanggal baru (); //System.out.println (d.getTime ()); Acak r = acak baru (d.getTime ()); untuk (int i = 0; i <4; i ++) {int a = r.nextint (10); // Harap bilangan bulat dalam 10 [0, 9] int y = 10+r.nextint (20); // Integer dalam kisaran 10 ~ 30, karena warna koordinat y c = warna baru (r.nextint (255), r.nextint (255), r.nextint (255)); g.setColor (c); g.drawstring (""+a, 5+i*lebar/4, y); } // baris interferensi untuk (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 (lebar), r.nextint (tinggi), r.nextint (lebar), r.nextint (tinggi)); } g.dispose (); // Mirip dengan close () di aliran, drive flush () --- data flash ke IMG objek ImageIO.write (img, "jpg", FileOutputStream baru ("img/b.jpg")); }}Hasil demonstrasi:
Akhirnya, mari kita lihat kode verifikasi yang dapat diputar dan diskalakan - tuliskan ke file lokal gambar
Kode demo:
Paket cn.hncu.img; impor java.awt.color; impor java.awt.font; impor java.awt.graphics; impor java.awt.graphics2d; impor java.awt.geom.affinetransform; impor java.awt.image.bufferedimage; java.io.fileOutputStream; import java.io.ioException; impor java.util.date; impor java.util.random; impor org.junit.test; kelas publik imgdemo { @test // kode verifikasi yang dapat memutar dan zoom public void imgdemo3 () melempar filenotfoundException, ioException {int width = 80; tinggi int = 40; Int Lines = 10; BufferedImage IMG = BufferedImage baru (lebar, tinggi, bufferedImage.type_int_rgb); Grafik2d g2d = (grafik2d) img.getGraphics (); g2d.setfont (font baru ("宋体", font.bold, 20)); Acak r = acak baru (tanggal baru (). GetTime ()); // atur latar belakang warna g2d.setColor (warna baru (r.nextint (255), r.nextint (255), r.nextint (255))); g2d.drawrect (0, 0, lebar, tinggi); // Gambarlah perbatasan persegi panjang yang ditentukan. g2d.setColor (warna baru (r.nextint (255), r.nextint (255), r.nextint (255))); g2d.fillrect (0, 0, lebar, tinggi); // Isi persegi panjang yang ditentukan. untuk (int i = 0; i <4; i ++) {string str = ""+r.nextint (10); // memproses rotasi affinetransform tx = affinetransform baru (); Tx.rotate (math.random (), 5+i*15, tinggi-5); // Sudut rotasi diukur dengan radian, koordinat x jangkar rotasi, dan koordinat y dari jangkar rotasi //tx.scale (0,7+math.random (), 0,7+math.random ()); // Penskalaan multipel dalam arah koordinat x, beberapa penskalaan dalam arah koordinat y g2d.setTransform (TX); Warna c = warna baru (r.nextint (255), r.nextint (255), r.nextint (255)); g2d.setColor (c); g2d.drawstring (str, 2+i*lebar/4, tinggi-13); } // baris interferensi untuk (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 (lebar), r.nextint (tinggi), r.nextint (lebar), r.nextint (tinggi)); } g2d.dispose (); ImageIO.Write (IMG, "JPG", FileOutputStream baru ("img/c.jpg")); }}Hasil demonstrasi:
Sekarang kita akan mulai mendemonstrasikan teknologi verifikasi gambar meja depan.
Teknologi Verifikasi Gambar Meja Depan
Diagram struktur proyek ini:
index.jsp:
<%@ page language = "java" import = "java.util.*" pageEncoding = "utf-8"%> <! Doctype html public "-// w3c // dtd html 4.01 transisi // en"> <html> <head> <skrip type = "teks/javascript"> Fungsi "> Fungsi"> Function "> function"> function "> <html> <html> <html> <head> <head> <script type =" javascript "> function"> document.geteLementById ("servletimg"); var d = tanggal baru (); var time = d.gettime (); // Jika tidak ada ini // kalimat berikut tidak akan berfungsi, karena teknologi caching browser, gambar tidak akan disegarkan //img.src="/myhelloweb/servlet/imageservlet "; img.src = "/myHelloweb/servlet/figureServlet?"+waktu; // Hal di balik nomor tersebut dilewati GET} </script> </head> <body> Ini adalah beranda manual saya! <br/> <img id = "servletimg" src = "/myHelloweb/servlet/firfigeservlet"/> <a href = "javascript: changimg ()"> tidak jelas </a> </body> </html>Web.xml:
<? Xml Version = "1.0" encoding = "UTF-8"?> <Web-app Versi = "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http:/www.w3.org/org/2001 =" http:/www.w3.org/org/p21 XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http:/-non-noame.3.sun.com/xml/ns/javaee/we-n-noP_3.sun.com <cricken> Ini adalah deskripsi komponen J2EE saya </cripence> <play-name> Ini adalah nama tampilan dari komponen J2EE saya </splay-name> <servlet-name> Imageservlet </servlet-name> <servlet-class> </servlet> </servlet> </servlet> </servlet> </servlet> </servlet> </servlet> </servlet> </servlet> </servlet> </servlet> </servlet-niclass </servlet> </servlet> </servlet> </servlet </servlet> </servlet> </servlet> </servlet> </servlets-nicser </servlet> </Servlet> <RURL-PATERS>/SERVLET/IFACTESSERVLET </RURL-PATERS> </Servlet-Mapping> <dreendic-filt-file-file> <creendak-file> index.jsp </welcome-file> </welcome-file-list> </web-app>
FIGLESSERVLET.java
Paket cn.hncu.img; impor java.awt.color; impor java.awt.font; impor java.awt.graphics; impor java.awt.image.bufferedImage; import java.io.ioexception; impor java.io.printwriter; impor java.omporil. javax.imageio.imageio; import javax.servlet.servletException; import javax.servlet.http.httpservlet; import publicservex. doGet (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {dopost (permintaan, respons); } public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {// beri tahu klien bahwa format output response.setContentType ("Image/JPEG"); Int Width = 80; tinggi int = 40; Int Lines = 10; BufferedImage IMG = BufferedImage baru (lebar, tinggi, bufferedImage.type_int_rgb); Grafik g = img.getGraphics (); // atur latar belakang warna g.setColor (color.white); g.fillrect (0, 0, lebar, tinggi); // atur font g.setfont (font baru ("宋体", font.bold, 20)); // acak acak r = acak baru (tanggal baru (). GetTime ()); untuk (int i = 0; i <4; i ++) {int a = r.nextint (10); int y = 10+r.nextint (20); // Integer dalam kisaran 10 ~ 30, karena warna koordinat y c = warna baru (r.nextint (255), r.nextint (255), r.nextint (255)); g.setColor (c); g.drawstring (""+a, 5+i*lebar/4, y); } // Baris interferensi untuk (int i = 0; i <baris; i ++) {warna c = warna baru (r.nextint (255), r.nextint (255), r.nextint (255)); g.setColor (c); G.Drawline (r.nextint (lebar), r.nextint (tinggi), r.nextint (lebar), r.nextint (tinggi)); } g.dispose (); // Mirip dengan close () di aliran, drive flush () --- data flash ke IMG objek Imageo.write (img, "jpg", response.getoutputStream ()); }}Hasil demonstrasi:
Berikut ini ada di index.jsp:
Jika kalimat ini digunakan:
img.src = "/myHelloweb/servlet/imageservlet";
Anda dapat memeriksa header respons:
Mari kita lihat header respons menggunakan kalimat ini:
img.src = "/myHelloweb/servlet/imageservlet?"+waktu;
Ada respons tanggal tambahan!
Karena waktu telah berubah, setiap kali saya mengklik untuk melihatnya, saya akan memintanya ke server lagi, dan saya tidak akan berhenti memintanya karena cache browser.
Kode verifikasi berakhir di sini.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.