📄 sheargimpyrenderer.java
字号:
package nl.captcha.gimpy;import java.awt.Color;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.security.SecureRandom;import java.util.Random;public class ShearGimpyRenderer implements GimpyRenderer { private final Random _gen = new SecureRandom(); private final Color _color; public ShearGimpyRenderer() { this(Color.GRAY); } public ShearGimpyRenderer(Color color) { _color = color; } @Override public void gimp(BufferedImage bi) { Graphics2D g = bi.createGraphics(); shearX(g, bi.getWidth(), bi.getHeight()); shearY(g, bi.getWidth(), bi.getHeight()); g.dispose(); } private void shearX(Graphics2D g, int w1, int h1) { int period = _gen.nextInt(10) + 5; boolean borderGap = true; int frames = 15; int phase = _gen.nextInt(5) + 2; for (int i = 0; i < h1; i++) { double d = (period >> 1) * Math.sin((double) i / (double) period + (6.2831853071795862D * phase) / 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 void shearY(Graphics2D g, int w1, int h1) { int period = _gen.nextInt(30) + 10; // 50; boolean borderGap = true; int frames = 15; int phase = 7; for (int i = 0; i < w1; i++) { double d = (period >> 1) * Math.sin((float) i / period + (6.2831853071795862D * phase) / 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); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -