まず、画像検証コードをローカルに生成する方法を見てから、検証コードの出力をWebページに書き込み、実装してください。
まず、最も単純な関数を見てみましょう。実装は、文字列を画像に変えてファイルに書き込むことです。
実装コード:
パッケージcn.hncu.img; import java.awt.graphics; import java.awt.image.bufferedimage; import java.io.fileenotfoundexceptecteptectectective。シンプルなエンコードとデコードを実行します。 import org.junit.test; public class imgdemo {//文字列を画像に変換する方法を学び、@test public void imgdemo1()throws filenotfoundexception、ioexception {bufferedimage {bufferedimage {umg = new bufferedimage(60、30、bufferedimage.type_int_rgbb); //合成整数ピクセルの8ビットRGBカラーコンポーネントを持つ画像を表します。グラフィックg = img.getgraphics(); G.DrawString( "Hello"、10,20); //このグラフィックコンテキストの現在のフォントと色を使用して、指定された文字列で与えられたテキストを描画します。左端の文字のベースラインは、このグラフコンテキスト座標系の(x、y)位置にあります。 g.dispose(); //// close()と同様のストリームで、flush()---データをIMGオブジェクトにフラッシュします//このグラフのコンテキストと使用するすべてのシステムリソースを解放します。処分を呼び出した後、グラフィックオブジェクトを使用できなくなります。 Imageio.write(img、 "jpg"、new fileoutputStream( "img/a.jpg")); //指定された形式をサポートする任意のImageWriterを使用してファイルする画像を書き込みます。 }}結果:
上記はとても簡単ですよね?私たちが見る検証コードはこのようではありません。 OK、干渉線、背景色、文字、Y座標を追加しましょう。
干渉線と背景色の検証コード - ファイルに書き込みます
デモコード:
パッケージcn.hncu.img; Import java.awt.color; import java.awt.font; import java.awt.graphics; Import java.awt.image.bufferedimage; Import java.io.filenotfoundexception; java.util.random; Import javax.imageio.imageio; //このクラスには、ImagEReaderとImageWriterを見つけるために使用されるものが含まれています。 Import org.junit.test; public class imgdemo {//上記の文字列を通常使用する検証コードに変更 - 背景色と干渉行@test public void imgdemo2()throws filenotfoundexception、ioexception {int width = 80; int height = 40; int lines = 10; BufferedImage IMG = new BuffereDimage(幅、高さ、bufferedimage.type_int_rgb);グラフィックg = img.getgraphics(); //背景色G.SetColor(color.white)を設定します。 g.fillrect(0、0、width、height); //背景を描画//指定された長方形を入力します。長方形をグラフィックコンテキストの現在の色で埋める// font g.setfont(new font( "宋体"、font.bold、18))を設定します。 //乱数日付d = new date(); //system.out.println(d.getTime());ランダムr = newランダム(d.getTime()); for(int i = 0; i <4; i ++){int a = r.nextint(10); // 10 [0、9] int y = 10+r.nextint(20)内の整数をお願いします。 // y座標Color Color C = new Color(R.Nextint(255)、R.Nextint(255)、R.Nextint(255))として、範囲10〜30の整数。 G.SetColor(C); G.DrawString( ""+a、5+i*width/4、y); } //(int i = 0; i <lines; i ++){color c = new color(r.nextint(255)、r.nextint(255)、r.nextint(255)); G.SetColor(C); G.Drawline(R.Nextint(width)、R.nextint(height)、R.nextint(width)、r.nextint(height)); } g.dispose(); //ストリームのclose()と同様に、flush()---フラッシュデータをimg object imageio.write(img、 "jpg"、new fileoutputstream( "img/b.jpg"))に駆動するdrive drive drive drive drive dribes dribes dribes dribes }}デモンストレーション結果:
最後に、回転してスケーリングできる検証コードを見てみましょう - 写真のローカルファイルに書き込みます
デモコード:
パッケージcn.hncu.img; import java.awt.color; import java.awt.font; import java.awt.graphics; import java.awt.graphics2d; import java.affinetransform; import java.awt.image.bufferedimage; Import java.io.io.ii.io.ii.ii.ii.ii.ii.ii.ii.ii.ii.ii.ii.のインポートjava.io.fileoutputStream; Import java.io.ioexception; Import java.util.date; Import java.util.random; Import javax.imageio.imageio; import org.junit.test; public class imgdemo { @test // public void imgdemo3()throws filenotfoundexception、ioexception {int width = 80; int height = 40; int lines = 10; BufferedImage IMG = new BuffereDimage(幅、高さ、bufferedimage.type_int_rgb); Graphics2d g2d =(graphics2d)img.getgraphics(); g2d.setfont(new Font( "宋体"、font.bold、20));ランダムr = newランダム(new date()。getTime()); //バックグラウンドカラーg2d.setcolor(new Color(R.Nextint(255)、R.Nextint(255)、R.Nextint(255)))を設定します。 g2d.drawrect(0、0、幅、高さ); //指定された長方形の境界を描きます。 g2d.setcolor(new Color(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); //回転アフィントランズフォームTx = new Affinetransform()の処理; tx.rotate(math.random()、5+i*15、height-5); //ラジアンで測定された回転角、回転アンカーのx座標、および回転アンカーのy座標//tx.scale(0.7+math.random()、0.7+math.random()); // x座標方向のスケーリング倍数、y座標方向G2D.setTransform(TX)のスケーリング倍数。 Color C = new Color(R.Nextint(255)、R.Nextint(255)、R.Nextint(255)); g2d.setcolor(c); g2d.drawstring(str、2+i*width/4、height-13); } //(int i = 0; i <lines; i ++){color c = new color(r.nextint(255)、r.nextint(255)、r.nextint(255)); g2d.setcolor(c); g2d.drawline(r.nextint(width)、r.nextint(height)、r.nextint(width)、r.nextint(height)); } 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 = ""> fentical changimg() document.getElementById( "servletimg"); var d = new date(); var time = d.getTime(); //これがない場合//ブラウザのキャッシュテクノロジーが機能しないため、次の文が機能しません。 img.src = "/myhelloweb/servlet/imageservlet?"+time; //番号の背後にあるものが渡されます} </script> </head> <body>これは私の手動ホームページです! <br/> <img id = "servletimg" src = "/myhelloweb/servet/imageservlet"/> <a href = "javascript:changimg()">不明</a> </body> </html>
web.xml:
<?xml version = "1.0" encoding = "utf-8"?> <web-appバージョン= "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns:xsi = "http://www.w3.org/2001/xmlschema-instcance" xsi:schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/ns/javaee/web-app_0.0.xsd"> <説明>これは私のj2eeコンポーネントの説明です</description> <display-name>これは私のj2eeコンポーネントのディスプレイ名です</display-name> <servlet-name> imageservlet </servlet-name> <servlet-class> cn.hncu.img.imageservlet </servlet-class> </servlet-name> <servet-name> <servet-name> <url-pattern>/servlet/imageservlet </url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file> index.jsp </welcome-file> </welcome-file-list> </web-app>
Imageservlet.java
パッケージcn.hncu.img;インポートjava.awt.color; Import java.awt.font; Import java.awt.graphics; Import java.awt.image.bufferedimage; Import java.io.ioexception; Import Java.io.io.printwriter; Import java.util.util.util.util.util.util.util.til. javax.imageio.imageio; Import javax.servlet.servletexception; Import javax.servlet.http.httpservlet; Import javax.servlet.httpservletrequest; Import javax.servlet.http.httpservletreSponseponse doget(httpservletrequest request、httpservletresponse応答)servletexception、ioexception {dopost(request、response); } public void dopost(httpservletrequest request、httpservletResponse応答)servletexception、ioexception {//出力形式のresponse.setContentType( "image/jpeg"); int width = 80; int height = 40; int lines = 10; BufferedImage IMG = new BuffereDimage(幅、高さ、bufferedimage.type_int_rgb);グラフィックg = img.getgraphics(); //背景色G.SetColor(color.white)を設定します。 G.FillRect(0、0、幅、高さ); // font g.setfont(new Font( "宋体"、font.bold、20))を設定します。 //ランダムランダムr = newランダム(new date()。getTime()); for(int i = 0; i <4; i ++){int a = r.nextint(10); int y = 10+r.nextint(20); // y座標Color c = new Color(R.Nextint(255)、R.Nextint(255)、R.Nextint(255))として、範囲10〜30の整数。 G.SetColor(C); G.DrawString( ""+a、5+i*width/4、y); } //(int i = 0; i <lines; i ++){color c = new color(r.nextint(255)、r.nextint(255)、r.nextint(255)); G.SetColor(C); G.Drawline(R.Nextint(width)、R.nextint(height)、R.nextint(width)、r.nextint(height)); } g.dispose(); // close()に似ています。ストリームのdrive flush()--- flash data dat data data flash ymageio.write(img、 "jpg"、respons.getOutputStream()); }}デモンストレーション結果:
以下はindex.jspにあります:
この文が使用されている場合:
img.src =”/myhelloweb/servlet/imageservlet”;
応答ヘッダーを確認できます。
この文を使用して応答ヘッダーを見てみましょう。
img.src =”/myhelloweb/servlet/imageservlet?”+time;
追加の日付応答があります!
時間が変化しているため、クリックして表示するたびに、再度サーバーにリクエストします。ブラウザのキャッシュのためにリクエストを停止しません。
検証コードはここで終了します。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。