空心验证码(定制)

复制代码
 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.

posted @   悟寰轩-叶秋  阅读(985)  评论(1编辑  收藏  举报
编辑推荐:
· 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语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示