تشترك هذه المقالة في إصدار Java من رمز التحقق من رمز التحقق من رمز التحقق من QQ Imitation للجميع. المحتوى المحدد كما يلي
تشمل الميزات: حجم الصورة المخصصة وطول الحرف ، لون الخلفية العشوائية ولون الأحرف ، زاوية إزاحة الحرف العشوائية ، الحافة السلسة للحرف ، خطوط التداخل ، الضوضاء ، تشويه الخلفية.
أردت أصلاً أن أجعل الشخصيات ملتوية ، لكنني لا أعرف لماذا كتب المعلم النص ثم أبلغ عن الخطأ. دعونا نفعل ذلك الآن. آمل أن يساعد السيد في تصحيحه.
تجدر الإشارة إلى أن السبب وراء وجود رمز التحقق من QQ مثل هذا الخط الجزائري. إذا لم يكن لدى النظام نظامه ، فأنت بحاجة إلى تثبيته بنفسك. يمكنك تنزيل اسم الخط على Baidu وطرح فقط مجلد خطوط النظام.
صورة التكاثر:
حزمة hh.com.util ؛ استيراد java.io.ioException ؛ استيراد javax.servlet.servletexception ؛ استيراد javax.servlet.http.httpservletrequest ؛ استيراد javax.servlet.http.httpservletresponse ؛ استيراد javax.servlet.http.httpservletresponse ؛ استيراد javax.servlet.http.httpsession ؛ الطبقة العامة AuthImage يمتد javax.servlet.http.httpservlet تنفذ javax.servlet.servlet {static final long serialversionuid = 1l ؛ خدمة void العامة (طلب httpservletrequest ، استجابة httpservletresponse) يلقي servleTexception ، ioException {reponse.setheader ("pragma" ، "no-cache") ؛ استجابة. استجابة. استجابة. // إنشاء سلسلة عشوائية سلسلة VerifyCode = VerifyCodeUtils.generateverififeCode (4) ؛ // Save Session Session Httpsession Session = request.getSession (true) ؛ Session.setAttribute ("Rand" ، VerifyCode.ToLowerCase ()) ؛ // إنشاء صورة int w = 200 ، h = 80 ؛ VerifyCodeUtils.outputImage (W ، H ، Response.getOutputStream () ، VerifyCode) ؛ }} فئة VerifyCodeUtils
حزمة hh.com.util ؛ استيراد java.awt.color ؛ استيراد java.awt.font ؛ استيراد java.awt.graphics ؛ استيراد java.awt.graphics2d ؛ import java.awt.lineargradientpaint ؛ استيراد java.awt.paint java.awt.image.bufferedImage ؛ import java.io.file ؛ import java.io.fileOutputStream ؛ import java.ioexception ؛ import java.io.outputstream ؛ import java.util.arrays ؛ import java.util.random ؛ استيراد javax.imageio.imageio ؛ الفئة العامة VerifyCodeUtils {// استخدم الخط الجزائري ، إذا لم يكن في النظام ، فإن الخط يعرض فقط الرسملة ، ويزيل العديد من الأحرف المربكة بسهولة 1،0 ، I ، O السلسلة النهائية الثابتة العامة VERIFY_CODES = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ" ؛ عشوائي ثابت عشوائي = جديد عشوائي () ؛ / *** استخدم مصدر الحرف الافتراضي للنظام لإنشاء رمز التحقق* param expysize طول رمز التحقق* regurn*/ سلسلة ثابتة عامة replayeveryifyifycode (int expysize ، Verify_Codes) ؛ } / *** استخدم المصدر المحدد لإنشاء رمز التحقق* param exeristize طول رمز التحقق* param مصادر رمز التحقق مصدر الحرف* @regurn string static refereadyifyFiveCode (int verifysize ، مصادر السلسلة) {if (مصادر == null || sources.length () == 0) } int codeslen = sources.length () ؛ Random Rand = New Random (System.CurrentTimeMillis ()) ؛ stringBuilder VerifyCode = new StringBuilder (expysize) ؛ من أجل (int i = 0 ؛ i <VerifySize ؛ i ++) {VerifyCode.append (sources.charat (rand.nextint (codeslen-1)))) ؛ } return VerifyCode.toString () ؛ } / ** * قم بإنشاء ملف رمز التحقق العشوائي وإرجاع قيمة رمز التحقق * param w * param h * param outputfile * param verifyzize * @throws ioexception outprateverifymage (int w ، int h ، file outpysize) throws ioexception { outputImage (W ، H ، OutputFile ، VerifyCode) ؛ إرجاع VerifyCode ؛ } / ** * إخراج دفق صورة رمز التحقق العشوائي وإرجاع قيمة رمز التحقق * param w * param h * param os * param verifysize * reghrows ioexception * / public static string outputeverifyimage (int w ، int h ، outputStream os ، intriesizize) throws ioexception { outputImage (W ، H ، OS ، VerifyCode) ؛ إرجاع VerifyCode ؛ } / ** * قم بإنشاء ملف صورة رمز التحقق المحدد * param w * param h * param outputfile * @param code * throws ioException * / public static void outputImage (int w ، int h ، file outputfile ، string code) relding ioexception {if (outputfile == null) {return ؛ } file dir = outputFile.getParentFile () ؛ if (! dir.exists ()) {dir.mkdir () ؛ } حاول {outputFile.CreateNewFile () ؛ fileOutputStream fos = fileOutputStream جديد (OutputFile) ؛ outputImage (W ، H ، FOS ، Code) ؛ fos.close () ؛ } catch (ioException e) {throw e ؛ }} / ** * إخراج دفق صورة رمز التحقق المحدد * param w * param h * param os * param code * throws ioException * / public static void outputImage (int w ، int h ، outputstream os ، string code) rewrows ioexception {int verifyzize = code.length () ؛ صورة bufferedImage = جديد bufferedImage (W ، H ، BufferedImage.type_int_rgb) ؛ Rand Rand = New Random () ؛ graphics2d g2 = image.creategraphics () ؛ g2.SetRenderingHint (renderinghints.key_antialiasing ، renderinghints.value_antialias_on) ؛ اللون [] الألوان = لون جديد [5] ؛ color [] colorpaces = new color [] {color.hite ، color.cyan ، color.gray ، color.light_gray ، color.magenta ، color.orange ، color.pink ، color.yellow} ؛ تعويم [] الكسور = تعويم جديد [الألوان. الطول] ؛ لـ (int i = 0 ؛ i <color.length ؛ i ++) {colors [i] = colorspaces [rand.nextint (colorpaces.length)] ؛ الكسور [i] = rand.nextFloat () ؛ } arrays.sort (fractions) ؛ G2.setColor (color.gray) ؛ // تعيين لون الحدود G2.fillRect (0 ، 0 ، W ، H) ؛ اللون C = getRandColor (200 ، 250) ؛ G2.setColor (C) ؛ // تعيين لون الخلفية G2.fillRect (0 ، 2 ، W ، H-4) ؛ // رسم خط التداخل عشوائي = جديد عشوائي () ؛ g2.setColor (getRandColor (160 ، 200)) ؛ // set لون الخط لـ (int i = 0 ؛ i <20 ؛ i ++) {int x = random.nextint (w - 1) ؛ int y = random.nextint (h - 1) ؛ int xl = random.nextint (6) + 1 ؛ int yl = random.nextint (12) + 1 ؛ g2.drawline (x ، y ، x + xl + 40 ، y + yl + 20) ؛ }. لـ (int i = 0 ؛ i <area ؛ i ++) {int x = random.nextint (w) ؛ int y = random.nextint (h) ؛ int rgb = getRandomIntColor () ؛ image.setrgb (x ، y ، rgb) ؛ } القص (G2 ، W ، H ، C) ؛ // تشويه الصورة G2.setColor (getRandColor (100 ، 160)) ؛ int fontsize = H-4 ؛ font font = new font ("الجزائري" ، font.italic ، fontsize) ؛ g2.setfont (الخط) ؛ char [] chars = code.tochararray () ؛ لـ (int i = 0 ؛ i <erilefysize ؛ i ++) {AffinetRansform Affine = new AffinetRansform () ؛ Affine.Settorotation (Math.pi / 4 * Rand.NextDouble () * (Rand.NextBoolean ()؟ 1: -1) ، (w / everifysize) * i + fontsize / 2 ، h / 2) ؛ G2.SetTransform (Affine) ؛ g2.drawchars (chars ، i ، 1 ، ((W -10)/everifysize) * i + 5 ، h/2 + fontsize/2 - 10) ؛ } g2.dispose () ؛ imageio.write (صورة ، "JPG" ، OS) ؛ } getRandColor color static الخاص (int fc ، int bc) {if (fc> 255) fc = 255 ؛ إذا (BC> 255) قبل الميلاد = 255 ؛ int r = fc + random.nextint (bc - fc) ؛ int g = fc + random.nextint (bc - fc) ؛ int b = fc + random.nextint (bc - fc) ؛ إرجاع اللون الجديد (R ، G ، B) ؛ } int static int getRandomIntColor () {int [] rgb = getRandomRgb () ؛ int color = 0 ؛ لـ (int c: rgb) {color = color << 8 ؛ اللون = اللون | ج. } لون الإرجاع ؛ } int static int [] getRandomrgb () {int [] rgb = new int [3] ؛ لـ (int i = 0 ؛ i <3 ؛ i ++) {rgb [i] = random.nextint (255) ؛ } إرجاع RGB ؛ } قص باطل ثابت خاص (الرسومات G ، int W1 ، int H1 ، لون اللون) {shearx (g ، w1 ، h1 ، color) ؛ Sheary (G ، W1 ، H1 ، Color) ؛ } shearx private static void (Graphics G ، int W1 ، int H1 ، لون اللون) {int period = random.nextint (2) ؛ Boolean Bordergap = True ؛ إطارات int = 1 ؛ int phase = random.nextint (2) ؛ لـ (int i = 0 ؛ i <h1 ؛ i ++) {double d = (double) (period >> 1) * math.sin ((double) i / (double) period+(6.2831853071795862d * (double)) / (double) prames) ؛ G.Copyarea (0 ، i ، W1 ، 1 ، (int) d ، 0) ؛ if (bordergap) {g.setColor (color) ؛ G.Drawline ((int) d ، i ، 0 ، i) ؛ g.drawline ((int) d + w1 ، i ، w1 ، i) ؛ }}} sheary private static void (الرسومات g ، int w1 ، int h1 ، لون اللون) {int erians = random.nextint (40) + 10 ؛ // 50 ؛ Boolean Bordergap = True ؛ إطارات int = 20 ؛ مرحلة int = 7 ؛ لـ (int i = 0 ؛ i <w1 ؛ i ++) {double d = (double) (period >> 1) * math.sin ((double) i / (double) period+(6.2831853071795862d * (double) phase) / (double) prames) ؛ G.Copyarea (I ، 0 ، 1 ، H1 ، 0 ، (int) d) ؛ if (bordergap) {g.setColor (color) ؛ G.Drawline (i ، (int) d ، i ، 0) ؛ G.Drawline (i ، (int) d + h1 ، i ، h1) ؛ }}} public static void main (string [] args) يلقي ioException {file dir = file new ("f:/everifier") ؛ int w = 200 ، h = 80 ؛ لـ (int i = 0 ؛ i <50 ؛ i ++) {string verifyCode = generAveryifyifyCode (4) ؛ ملف ملف = ملف جديد (dir ، VerifyCode + ".jpg") ؛ OutputImage (W ، H ، file ، verifyCode) ؛ }}} تكوين web.xml:
<Srevlet> <Servlet-Name> authimage </revlet-name> <Servlet-class> hh.com.util.authimage </servlet-class> </servlet> <sterled mapping> <Servlet-Name> authimage </radlet-name> <Url-patern>/authimage </url-patern>
ما سبق هو كل شيء عن هذا المقال. آمل أن تلهمك لتعلم رمز التحقق من صورة Java.