空心验证码(定制)
1 Graphics2D graphics = (Graphics2D) image.getGraphics(); 2 graphics.setColor(color); 3 RenderingHints hints = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 4 hints.add(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY)); 5 graphics.setRenderingHints(hints); 6 FontRenderContext frc = graphics.getFontRenderContext(); 7 8 char[] wordChars = text.toCharArray(); 9 int startPosY = 40; 10 int startPosX = 60; 11 Random random = new Random(); 12 for (int i = 0; i < wordChars.length; i++) { 13 graphics.setFont(fonts[0]); 14 char[] charToDraw = new char[] { wordChars[i] }; 15 GlyphVector fontGV = fonts[0].createGlyphVector(frc, charToDraw); 16 Shape textShape = fontGV.getOutline(); 17 AffineTransform rotate45 = AffineTransform.getRotateInstance(30 * Math.PI, 0, 0); 18 Shape rotatedText = rotate45.createTransformedShape(textShape); 19 graphics.translate(startPosX, startPosY); 20 graphics.draw(rotatedText); 21 startPosX = (random.nextInt(3) + 1) * 10; 22 startPosY = (random.nextInt(3) + 1); 23 } 24 25 graphics.dispose();
扣空心,只支持一个一个字符的~,多个字符需要循环draw.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决