From 30d8e227e8d823b6c38c3b9c90ac2df03b63befe Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期二, 25 二月 2025 16:41:22 +0800 Subject: [PATCH] 淘宝转链接口更新 --- fanli/src/main/java/com/yeshi/fanli/util/VerifyCodeUtil.java | 566 +++++++++++++++++++++++++++++--------------------------- 1 files changed, 293 insertions(+), 273 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/util/VerifyCodeUtil.java b/fanli/src/main/java/com/yeshi/fanli/util/VerifyCodeUtil.java index bcf304d..43db916 100644 --- a/fanli/src/main/java/com/yeshi/fanli/util/VerifyCodeUtil.java +++ b/fanli/src/main/java/com/yeshi/fanli/util/VerifyCodeUtil.java @@ -1,273 +1,293 @@ -package com.yeshi.fanli.util; - -import java.awt.Color; -import java.awt.Font; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.RenderingHints; -import java.awt.geom.AffineTransform; -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.util.Arrays; -import java.util.Random; - -import javax.imageio.ImageIO; - -public class VerifyCodeUtil { - // 浣跨敤鍒癆lgerian瀛椾綋锛岀郴缁熼噷娌℃湁鐨勮瘽瀹夎瀛椾綋锛屽瓧浣撳彧鏄剧ず澶у啓锛屽幓鎺変簡1,0,i,o鍑犱釜瀹规槗娣锋穯鐨勫瓧 - public static final String VERIFY_CODES = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ"; - private static Random random = new Random(); - - /** - * 浣跨敤绯荤粺榛樿瀛楃婧愮敓鎴愰獙璇佺爜 - * - * @param verifySize - * 楠岃瘉鐮侀暱搴� - * @return - */ - public static String generateVerifyCode(int verifySize) { - return generateVerifyCode(verifySize, VERIFY_CODES); - } - - /** - * 浣跨敤鎸囧畾婧愮敓鎴愰獙璇佺爜 - * - * @param verifySize - * 楠岃瘉鐮侀暱搴� - * @param sources - * 楠岃瘉鐮佸瓧绗︽簮 - * @return - */ - public static String generateVerifyCode(int verifySize, String sources) { - if (sources == null || sources.length() == 0) { - sources = VERIFY_CODES; - } - int codesLen = sources.length(); - Random rand = new Random(System.currentTimeMillis()); - StringBuilder verifyCode = new StringBuilder(verifySize); - for (int i = 0; i < verifySize; i++) { - verifyCode.append(sources.charAt(rand.nextInt(codesLen - 1))); - } - return verifyCode.toString(); - } - - /** - * 鐢熸垚闅忔満楠岃瘉鐮佹枃骞惰繑鍥為獙璇佺爜 - * - * @param w - * @param h - * @param outputFile - * @param verifySize - * @return - * @throws IOException - */ - public static String outputVerifyImage(int w, int h, File outputFile, int verifySize) throws IOException { - String verifyCode = generateVerifyCode(verifySize); - outputImage(w, h, outputFile, verifyCode); - return verifyCode; - } - - /** - * 杈撳嚭闅忔満楠岃瘉鐮佸浘鐗囨祦,骞惰繑鍥為獙璇佺爜 - * - * @param w - * @param h - * @param os - * @param verifySize - * @return - * @throws IOException - */ - public static String outputVerifyImage(int w, int h, OutputStream os, int verifySize) throws IOException { - String verifyCode = generateVerifyCode(verifySize); - outputImage(w, h, os, verifyCode); - return verifyCode; - } - - /** - * 鐢熸垚鎸囧畾楠岃瘉鐮佸浘鍍忔枃 - * - * @param w - * @param h - * @param outputFile - * @param code - * @throws IOException - */ - public static void outputImage(int w, int h, File outputFile, String code) throws IOException { - if (outputFile == null) { - return; - } - File dir = outputFile.getParentFile(); - if (!dir.exists()) { - dir.mkdirs(); - } - try { - outputFile.createNewFile(); - FileOutputStream fos = new 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) throws IOException { - int verifySize = code.length(); - BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); - Random rand = new Random(); - Graphics2D g2 = image.createGraphics(); - g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); - Color[] colors = new Color[5]; - Color[] colorSpaces = new Color[] { Color.WHITE, Color.CYAN, Color.GRAY, Color.LIGHT_GRAY, Color.MAGENTA, - Color.ORANGE, Color.PINK, Color.YELLOW }; - float[] fractions = new float[colors.length]; - for (int i = 0; i < colors.length; i++) { - colors[i] = colorSpaces[rand.nextInt(colorSpaces.length)]; - fractions[i] = rand.nextFloat(); - } - Arrays.sort(fractions); - - g2.setColor(Color.GRAY);// 璁剧疆杈规 - g2.fillRect(0, 0, w, h); - - Color c = getRandColor(200, 250); - g2.setColor(c);// 璁剧疆鑳屾櫙 - g2.fillRect(0, 2, w, h - 4); - - // 缁樺埗骞叉壈 - Random random = new Random(); - g2.setColor(getRandColor(160, 200));// 璁剧疆绾挎潯鐨勯鑹� - for (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); - } - - // 娣诲姞鍣偣 - float yawpRate = 0.05f;// 鍣0 - int area = (int) (yawpRate * w * h); - for (int i = 0; i < area; i++) { - int x = random.nextInt(w); - int y = random.nextInt(h); - int rgb = getRandomIntColor(); - image.setRGB(x, y, rgb); - } - - shear(g2, w, h, c);// 浣垮浘鐗囨壄 - - g2.setColor(getRandColor(100, 160)); - int fontSize = h - 4; - Font font = new Font("Algerian", Font.ITALIC, fontSize); - g2.setFont(font); - char[] chars = code.toCharArray(); - for (int i = 0; i < verifySize; i++) { - AffineTransform affine = new AffineTransform(); - affine.setToRotation(Math.PI / 4 * rand.nextDouble() * (rand.nextBoolean() ? 1 : -1), - (w / verifySize) * i + fontSize / 2, h / 2); - g2.setTransform(affine); - g2.drawChars(chars, i, 1, ((w - 10) / verifySize) * i + 5, h / 2 + fontSize / 2 - 10); - } - - g2.dispose(); - ImageIO.write(image, "JPEG", os); - } - - private static Color getRandColor(int fc, int bc) { - if (fc > 255) - fc = 255; - if (bc > 255) - bc = 255; - int r = fc + random.nextInt(bc - fc); - int g = fc + random.nextInt(bc - fc); - int b = fc + random.nextInt(bc - fc); - return new Color(r, g, b); - } - - private static int getRandomIntColor() { - int[] rgb = getRandomRgb(); - int color = 0; - for (int c : rgb) { - color = color << 8; - color = color | c; - } - return color; - } - - private static int[] getRandomRgb() { - int[] rgb = new int[3]; - for (int i = 0; i < 3; i++) { - rgb[i] = random.nextInt(255); - } - return rgb; - } - - private static void shear(Graphics g, int w1, int h1, Color color) { - shearX(g, w1, h1, color); - shearY(g, w1, h1, color); - } - - private static void shearX(Graphics g, int w1, int h1, Color color) { - - int period = random.nextInt(2); - - boolean borderGap = true; - int frames = 1; - int phase = random.nextInt(2); - - for (int i = 0; i < h1; i++) { - double d = (double) (period >> 1) - * Math.sin((double) i / (double) period + (6.2831853071795862D * (double) phase) / (double) frames); - 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); - } - } - - } - - private static void shearY(Graphics g, int w1, int h1, Color color) { - - int period = random.nextInt(40) + 10; // 50; - - boolean borderGap = true; - int frames = 20; - int phase = 7; - for (int i = 0; i < w1; i++) { - double d = (double) (period >> 1) - * Math.sin((double) i / (double) period + (6.2831853071795862D * (double) phase) / (double) frames); - 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) throws IOException { - File dir = new File("F:/verifies"); - int w = 200, h = 80; - for (int i = 0; i < 50; i++) { - String verifyCode = generateVerifyCode(4); - File file = new File(dir, verifyCode + ".jpg"); - outputImage(w, h, file, verifyCode); - } - } -} +package com.yeshi.fanli.util; + +import sun.misc.BASE64Encoder; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.geom.AffineTransform; +import java.awt.image.BufferedImage; +import java.io.*; +import java.util.Arrays; +import java.util.Random; + +public class VerifyCodeUtil { + // 浣跨敤鍒癆lgerian瀛椾綋锛岀郴缁熼噷娌℃湁鐨勮瘽瀹夎瀛椾綋锛屽瓧浣撳彧鏄剧ず澶у啓锛屽幓鎺変簡1,0,i,o鍑犱釜瀹规槗娣锋穯鐨勫瓧 + public static final String VERIFY_CODES = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ"; + private static Random random = new Random(); + + /** + * 浣跨敤绯荤粺榛樿瀛楃婧愮敓鎴愰獙璇佺爜 + * + * @param verifySize 楠岃瘉鐮侀暱搴� + * @return + */ + public static String generateVerifyCode(int verifySize) { + return generateVerifyCode(verifySize, VERIFY_CODES); + } + + /** + * 浣跨敤鎸囧畾婧愮敓鎴愰獙璇佺爜 + * + * @param verifySize 楠岃瘉鐮侀暱搴� + * @param sources 楠岃瘉鐮佸瓧绗︽簮 + * @return + */ + public static String generateVerifyCode(int verifySize, String sources) { + if (sources == null || sources.length() == 0) { + sources = VERIFY_CODES; + } + int codesLen = sources.length(); + Random rand = new Random(System.currentTimeMillis()); + StringBuilder verifyCode = new StringBuilder(verifySize); + for (int i = 0; i < verifySize; i++) { + verifyCode.append(sources.charAt(rand.nextInt(codesLen - 1))); + } + return verifyCode.toString(); + } + + /** + * 鐢熸垚闅忔満楠岃瘉鐮佹枃骞惰繑鍥為獙璇佺爜 + * + * @param w + * @param h + * @param outputFile + * @param verifySize + * @return + * @throws IOException + */ + public static String outputVerifyImage(int w, int h, File outputFile, int verifySize) throws IOException { + String verifyCode = generateVerifyCode(verifySize); + outputImage(w, h, outputFile, verifyCode); + return verifyCode; + } + + /** + * 杈撳嚭闅忔満楠岃瘉鐮佸浘鐗囨祦,骞惰繑鍥為獙璇佺爜 + * + * @param w + * @param h + * @param os + * @param verifySize + * @return + * @throws IOException + */ + public static String outputVerifyImage(int w, int h, OutputStream os, int verifySize) throws IOException { + String verifyCode = generateVerifyCode(verifySize); + outputImage(w, h, os, verifyCode); + return verifyCode; + } + + /** + * 鐢熸垚鎸囧畾楠岃瘉鐮佸浘鍍忔枃 + * + * @param w + * @param h + * @param outputFile + * @param code + * @throws IOException + */ + public static void outputImage(int w, int h, File outputFile, String code) throws IOException { + if (outputFile == null) { + return; + } + File dir = outputFile.getParentFile(); + if (!dir.exists()) { + dir.mkdirs(); + } + try { + outputFile.createNewFile(); + FileOutputStream fos = new FileOutputStream(outputFile); + outputImage(w, h, fos, code); + fos.close(); + } catch (IOException e) { + throw e; + } + } + + private static BufferedImage getVerifyImages(int w, int h, String code) { + + int verifySize = code.length(); + BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); + Random rand = new Random(); + Graphics2D g2 = image.createGraphics(); + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + Color[] colors = new Color[5]; + Color[] colorSpaces = new Color[]{Color.WHITE, Color.CYAN, Color.GRAY, Color.LIGHT_GRAY, Color.MAGENTA, + Color.ORANGE, Color.PINK, Color.YELLOW}; + float[] fractions = new float[colors.length]; + for (int i = 0; i < colors.length; i++) { + colors[i] = colorSpaces[rand.nextInt(colorSpaces.length)]; + fractions[i] = rand.nextFloat(); + } + Arrays.sort(fractions); + + g2.setColor(Color.GRAY);// 璁剧疆杈规 + g2.fillRect(0, 0, w, h); + + Color c = getRandColor(200, 250); + g2.setColor(c);// 璁剧疆鑳屾櫙 + g2.fillRect(0, 2, w, h - 4); + + // 缁樺埗骞叉壈 + Random random = new Random(); + g2.setColor(getRandColor(160, 200));// 璁剧疆绾挎潯鐨勯鑹� + for (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); + } + + // 娣诲姞鍣偣 + float yawpRate = 0.05f;// 鍣0 + int area = (int) (yawpRate * w * h); + for (int i = 0; i < area; i++) { + int x = random.nextInt(w); + int y = random.nextInt(h); + int rgb = getRandomIntColor(); + image.setRGB(x, y, rgb); + } + + shear(g2, w, h, c);// 浣垮浘鐗囨壄 + + g2.setColor(getRandColor(100, 160)); + int fontSize = h - 4; + Font font = new Font("Algerian", Font.ITALIC, fontSize); + g2.setFont(font); + char[] chars = code.toCharArray(); + for (int i = 0; i < verifySize; i++) { + AffineTransform affine = new AffineTransform(); + affine.setToRotation(Math.PI / 4 * rand.nextDouble() * (rand.nextBoolean() ? 1 : -1), + (w / verifySize) * i + fontSize / 2, h / 2); + g2.setTransform(affine); + g2.drawChars(chars, i, 1, ((w - 10) / verifySize) * i + 5, h / 2 + fontSize / 2 - 10); + } + + g2.dispose(); + + return image; + } + + /** + * 杈撳嚭鎸囧畾楠岃瘉鐮佸浘鐗囨祦 + * + * @param w + * @param h + * @param os + * @param code + * @throws IOException + */ + public static void outputImage(int w, int h, OutputStream os, String code) throws IOException { + BufferedImage image = getVerifyImages(w, h, code); + ImageIO.write(image, "JPEG", os); + } + + + /** + * 鑾峰彇Base64鐨勯獙璇佺爜 + * + * @param w + * @param h + * @param code + * @return + */ + public static String getVerifyImagesBase64(int w, int h, String code) { + BufferedImage image = getVerifyImages(w, h, code); + //杈撳嚭娴� + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + try { + ImageIO.write(image, "png", stream); + } catch (IOException e) { + e.printStackTrace(); + } + byte[] bytes = stream.toByteArray();//杞崲鎴愬瓧鑺� + BASE64Encoder encoder = new BASE64Encoder(); + String base64 = encoder.encodeBuffer(bytes).trim();//杞崲鎴恇ase64涓� + base64 = base64.replaceAll("\n", "").replaceAll("\r", "");//鍒犻櫎 \r\n + return base64; + } + + + private static Color getRandColor(int fc, int bc) { + if (fc > 255) + fc = 255; + if (bc > 255) + bc = 255; + int r = fc + random.nextInt(bc - fc); + int g = fc + random.nextInt(bc - fc); + int b = fc + random.nextInt(bc - fc); + return new Color(r, g, b); + } + + private static int getRandomIntColor() { + int[] rgb = getRandomRgb(); + int color = 0; + for (int c : rgb) { + color = color << 8; + color = color | c; + } + return color; + } + + private static int[] getRandomRgb() { + int[] rgb = new int[3]; + for (int i = 0; i < 3; i++) { + rgb[i] = random.nextInt(255); + } + return rgb; + } + + private static void shear(Graphics g, int w1, int h1, Color color) { + shearX(g, w1, h1, color); + shearY(g, w1, h1, color); + } + + private static void shearX(Graphics g, int w1, int h1, Color color) { + + int period = random.nextInt(2); + + boolean borderGap = true; + int frames = 1; + int phase = random.nextInt(2); + + for (int i = 0; i < h1; i++) { + double d = (double) (period >> 1) + * Math.sin((double) i / (double) period + (6.2831853071795862D * (double) phase) / (double) frames); + 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); + } + } + + } + + private static void shearY(Graphics g, int w1, int h1, Color color) { + + int period = random.nextInt(40) + 10; // 50; + + boolean borderGap = true; + int frames = 20; + int phase = 7; + for (int i = 0; i < w1; i++) { + double d = (double) (period >> 1) + * Math.sin((double) i / (double) period + (6.2831853071795862D * (double) phase) / (double) frames); + 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) throws IOException { + for(int i=0;i<100;i++) { + File f = new File("F:/verifies/"+i+".png"); + outputImage(300, 150, f, "long"); + } } +} -- Gitblit v1.8.0