Java AWT生成滑动验证码
最近工作需要在登录时使用滑动验证码做登录校验,在生成验证码图片的时候碰到了不小的麻烦 : (。 网上能查到的做法基本上都是使用一张已存在的实际图片作为滑块的图形模板,然后按照此模板做二重循环逐像素地从源图像抠出滑块以及新图。 这种方式优点就是可以控制每个像素,如改变局部的 Alpha 值、做局部的高斯模糊等。缺点也显而易见——太麻烦,且二重循环对内存也是不小的负担。 笔者的想法是:首先生成滑块 1)根据规定好的路径生成闭合区间;2) 设置 Graphics2D 的渲染区间,限制仅渲染此闭合区间的内部 ( setClip 方法);3)使用原图来渲染当前 Image( drawImage 方法)。最后在源图扣掉滑块的地方加上阴影。 研究了一下 Java 的 awt 图像处理,这里对这几天的成果做一个记录,本文仅涉及图像处理方面,去掉了其它业务逻辑。 生成闭合区间 Java awt中提供了 Shape 接口,来代表任意一种几何图形。考虑我们要实现如下滑块图形: 上图左边的滑块可以先简化为右侧,原理是一样的。右边的图像一共有 A、B、C、D、E、F 六个顶点。其中 CD 之间是一段圆弧。Graphics2D的坐标系从左上角开始,X轴往下、Y轴往右是正方向。这里先算出各顶点坐标:A(0,0)、B(0,50)、C(15,50)、D(35,50)、E(50,50)、F(50,0)。 注意到H1