Во -первых, давайте посмотрим, как создать код проверки изображения локально, а затем написать вывод кода проверки на веб -страницу для его реализации.
Давайте сначала рассмотрим самую простую функцию - реализация заключается в том, чтобы превратить строку в изображение и написать ее в файл.
Код реализации:
Пакет cn.hncu.img; import java.awt.graphics; import java.awt.image.bufferedimage; import java.io.filenotfoundexception; импорт java.io.fileoutputstream; Import java.io.ioexcept и выполнение простого кодирования и декодирования. Import org.junit.test; открытый класс imgdemo {// научиться превратить строку в изображение и записать в файл @test public void imgdemo1 (). // представляет изображение с 8-битными цветными компонентами RGB синтетических целых пикселей. Графика g = img.getGraphics (); G.DrawString ("Hello", 10,20); // Нарисуйте текст, заданный указанной строкой, используя текущий шрифт и цвет этого графического контекста. Базовая линия самого левого символа расположена в (x, y) положении этой системы координат контекста графика. g.dispose (); //////3 аналогично close () в потоке он ведет flush () --- мигает данные в объект IMG // выпускает контекст этого графика и все системы системных ресурсов. После вызова Dispose вы больше не можете использовать графический объект. Imageio.write (img, "jpg", new fileOutputStream ("img/a.jpg")); // Напишите изображение в файл, используя любое изображение, которое поддерживает заданный формат. }}результат:
Выше очень простое, верно? Код проверки, который мы видим, не такой. Хорошо, давайте добавим несколько интерференционных линий, цвет фона, символы и Y координаты.
Проверка кода с интерференционными линиями и цветами фона - запишите в файл
Демо -код:
Пакет cn.hncu.img; import java.awt.color; import java.awt.font; импорт java.awt.graphics; импорт java.awt.image.bufferedimage; импорт java.io.filenotfoundexception; импорт java.io.fileoutputstream; import.io.io.ioe.io.ioexception; java.util.random; import javax.imageio.imageio; // Этот класс содержит некоторые, используемые для поиска ImageReader и ImageWriter, а также статические и удобные методы для выполнения простого кодирования и декодирования. Import org.junit.test; открытый класс imgdemo {// Изменение вышеуказанной строки в код проверки, который мы обычно используем - генерируйте несколько случайных чисел, с цветом фонового цвета и интерференционных линий @test public void imgdemo2 () бросает filenotfoundexception, ioexception {int width = 80; int высота = 40; int lines = 10; BufferedImage img = new 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 ()); for (int i = 0; i <4; i ++) {int a = r.nextint (10); // пожалуйста целое число в пределах 10 [0, 9] int y = 10+r.nextint (20); // целое число в диапазоне 10 ~ 30, как y координата Color C = новый цвет (R.Nextint (255), R.Nextint (255), R.Nextint (255)); g.setcolor (c); g.drawstring (""+a, 5+i*width/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.Nextint (Width), R.Nextint (Height), R.Nextint (ширина), R.Nextint (высота)); } g.dispose (); // аналогично Close () В потоке Drive flush () --- Flash Data в IMG Object ImageIo.Write (IMG, "jpg", new FileOutputStream ("img/b.jpg")); }}Демонстрационные результаты:
Наконец, давайте посмотрим на код проверки, который можно повернуть и масштабировать - запишите его в локальный файл изображения
Демо -код:
Пакет cn.hncu.img; импортировать java.awt.color; import java.awt.font; импорт java.awt.graphics; импорт java.awt.graphics2d; импорт java.awt.geom.affinetransform; import java.awt.image.bufferedimage; importmage.iomexembertemexembertemexembel java.io.fileOutputStream; импорт java.io.ioexception; import java.util.date; импорт java.util.random; импорт javax.imageio.imageio; // Этот класс содержит некоторые статические и удобные методы для поиска ImageRiter и выполнения простого экодирования и декодирования. Import org.junit.test; открытый класс imgdemo { @test // код проверки, который может вращать и увеличивать public void imgdemo3 (), отбрасывает filenotfoundexception, ioException {int width = 80; int высота = 40; int lines = 10; BufferedImage img = new BufferedImage (ширина, высота, bufferedimage.type_int_rgb); Graphics2d g2d = (graphics2d) img.getgraphics (); G2D.Setfont (новый шрифт ("宋体", font.bold, 20)); Случайный r = новый случайный (новый date (). Gettime ()); // Установить цвет фона G2D.SetColor (новый цвет (R.Nextint (255), R.Nextint (255), R.Nextint (255))); G2D.DrawRect (0, 0, ширина, высота); // Нарисуйте границу указанного прямоугольника. G2D.SetColor (новый цвет (R.Nextint (255), R.Nextint (255), R.Nextint (255)); G2D.FillRect (0, 0, ширина, высота); // заполнить указанный прямоугольник. for (int i = 0; i <4; i ++) {string str = ""+r.nextint (10); // Обработка вращения AffineTransform 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); Цвет C = новый цвет (R.Nextint (255), R.Nextint (255), R.Nextint (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.Nextint (255)); G2D.SetColor (C); G2D.Drawline (R.Nextint (Width), R.Nextint (высота), R.Nextint (ширина), R.Nextint (высота)); } g2d.dispose (); Imageio.write (img, "jpg", new fileOutputStream ("img/c.jpg")); }}Демонстрационные результаты:
Теперь мы начнем демонстрировать технологию проверки изображений на стойке регистрации.
Технология проверки изображения на стойке регистрации
Структурная диаграмма этого проекта:
index.jsp:
<%@ page language = "java" import = "java.util.*" pageencoding = "utf-8"%> <! Doctype html public "-// w3c // dtd html 4.01 Transitional // en"> <html> <head> <script type = "text/javascript"> function wantramimg () {warct> <head> <script type = "javascript"> {) {) {warct> <head> <script type = "javascript" document.getElementbyId ("Servletimg"); var d = new Date (); var time = d.gettime (); // Если нет этого // следующее предложение не сработает, потому что технология кэширования браузера, изображение не будет обновлена //img.src="/myhelloweb/servlet/imageservlet "; img.src = "/myhelloweb/servlet/imageservlet?"+time; // вещь, стоящая за номером, проходит через get} </script> </head> <body> Это моя ручная домашняя страница! <br/> <img id = "servletimg" src = "/myhelloeb/servlet/imageservlet"/> <a href = "javascript: changimg ()"> неясно </a> </body> </html>web.xml:
<? xml version = "1.0" Encoding = "utf-8"?> <web-app arser = "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http://www.w3.org/2001/xmlschema electsmance "/www.w3. 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_0.xcsd"/rise-name> </rise-name> </rise-name> <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-pattern>/Servlet/ImageServlet </url-pattern> </servlet-mapping> <selcopport-file-list> <selcoveryfile> index.jsp </werveding-file> </werveding-file-list> </web-app>
Imageservlet.java
Пакет cn.hncu.img; импорт java.awt.color; import java.awt.font; импорт java.awt.graphics; импорт java.awt.image.bufferedimage; импорт java.io.ioexception; импорт java.io.printwriter; импорт java.ut.date; javax.imageio.imageio; import javax.servlet.servletexception; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservessesponse; Doget (httpservlectrequest -запрос, httpservletresponse response) бросает Servletexception, ioException {DoPost (запрос, ответ); } public void Dopost (httpservletRequest, httpservletresponse response) throws servletexception, ioexception {// сообщите клиенту, что выходной формат response.setcontenttype ("image/jpeg"); int ширина = 80; int высота = 40; int lines = 10; BufferedImage img = new BufferedImage (ширина, высота, bufferedimage.type_int_rgb); Графика g = img.getGraphics (); // Установить цвет фона g.setcolor (color.white); G.FillRect (0, 0, ширина, высота); // Установить шрифт g.setfont (новый шрифт ("宋体", font.bold, 20)); // случайный случайный r = new Random (new Date (). GetTime ()); for (int i = 0; i <4; i ++) {int a = r.nextint (10); int y = 10+r.nextint (20); // целое число в диапазоне 10 ~ 30, как цвет y координат C = новый цвет (R.Nextint (255), R.Nextint (255), R.Nextint (255)); g.setcolor (c); g.drawstring (""+a, 5+i*width/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.Nextint (Width), R.Nextint (Height), R.Nextint (ширина), R.Nextint (высота)); } g.dispose (); // аналогично Close () в потоке, Drive floush () --- Flash Data в img Object ImageIo.Write (IMG, "jpg", response.getOutputStream ()); }}Демонстрационные результаты:
Следующее в index.jsp:
Если это предложение используется:
img.src = ”/myhelloweb/servlet/imageservlet»;
Вы можете проверить заголовок ответа:
Давайте посмотрим на заголовок ответа, используя это предложение:
img.src = ”/myhelloweb/servlet/imageservlet?»+time;
Есть дополнительная дата ответа!
Поскольку время меняется, каждый раз, когда я нажимаю, чтобы увидеть его, я снова запрошу его на сервер, и я не перестану запрашивать его из -за кэша браузера.
Код проверки заканчивается здесь.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.