zoukankan      html  css  js  c++  java
  • 图片验证码

    package cn.itcast.image;
    
    import java.awt.Color;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    import javax.imageio.ImageIO;
    
    import org.junit.Test;
    
    public class Demo {
        @Test
        public void fun1(){
            /*
             * 1创建图片缓冲区
             * 2、设置宽高.
             * 3、得到这个图片的绘制环境(得到画笔)
             * 4、保存起来
             */
            BufferedImage bi=new BufferedImage(70, 35, BufferedImage.TYPE_INT_RGB);
            Graphics2D g=(Graphics2D) bi.getGraphics();//得到绘制环境
            g.setColor(Color.WHITE);//设置笔的颜色
            g.fillRect(0, 0, 70, 35);//填充矩形(左上角坐标,宽高) 这里就是使用上一步的绘制环境填充了矩形,也就是背景
            g.setColor(Color.RED);//设置笔的颜色
            g.drawString("Hello", 2, 35-2);//图片上写入字符串,其中2,2是表示xy轴的坐标
            
            try {
                ImageIO.write(bi, "JPEG", new FileOutputStream("D://xxx.jpg"));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        @Test
        public void fun2() throws FileNotFoundException{
            VerifyCode vc=new VerifyCode();
            BufferedImage bi=vc.getImage();
            VerifyCode.output(bi, new FileOutputStream("D://xxx1.jpg"));
            
            System.out.println(vc.getText());
        }
    }
    View Code
    package cn.itcast.image;
    
    import java.awt.BasicStroke;
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.Random;
    
    import javax.imageio.ImageIO;
    
    public class VerifyCode {
        private int w=70;
        private int h=35;
        private Random r=new Random();
        private String[] fontNames={"宋体","华文楷体","黑体","微软雅黑","楷体_GB2312"};
        private String codes="23456789abdcefghjkmnopqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ";
        private Color bgColor=new Color(255,255,255);
        private String text;
        
        private Color randomColor(){
            int red=r.nextInt(150);
            int green=r.nextInt(150);
            int blue=r.nextInt(150);
            return new Color(red,green,blue);
        }
        
        public char randomChar(){
            return codes.charAt(r.nextInt(codes.length()));
        }
        
        private Font randomFont(){
            int index=r.nextInt(fontNames.length);
            String fontName=fontNames[index];
            int style=r.nextInt(4);//随机生成的样式:0 无样式 1粗体  2斜体 3(粗体且斜体)
            int size=r.nextInt(5)+24;//生成随机字号
            return new Font(fontName,style,size);
        }
        
        private void drawLine(BufferedImage image){
            int num=3;//一共画三条线
            Graphics2D g2=(Graphics2D)image.getGraphics();
            for(int i=0;i<num;i++){
                int x1=r.nextInt(w);
                int y1=r.nextInt(h);
                int x2=r.nextInt(w);
                int y2=r.nextInt(h);
                g2.setStroke(new BasicStroke(1.5F));
                g2.setColor(Color.BLUE);
                g2.drawLine(x1, y1, x2, y2);
            }
        }
        
        public BufferedImage getImage(){
            BufferedImage image=createImage();
            Graphics2D g2=(Graphics2D)image.getGraphics();
            StringBuilder sb=new StringBuilder();
            for(int i=0;i<4;i++){
                String s=randomChar()+"";
                sb.append(s);
                float x=i*1.0F*w/4;
                g2.setFont(randomFont());
                g2.setColor(randomColor());
                g2.drawString(s,x,h-5);
            }
            this.setText(sb.toString());
            drawLine(image);
            return image;
        }
        
        private void setText(String text) {
            this.text=text;
        }
    
        public BufferedImage createImage(){
            BufferedImage bi=new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
            Graphics2D g2=(Graphics2D)bi.getGraphics();
            g2.setColor(bgColor);
            g2.fillRect(0, 0, w, h);
            return bi;
        }
    
        public String getText() {
            return text;
        }
        public static void output(BufferedImage image,OutputStream out){
            try {
                ImageIO.write(image, "JPEG", out);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    View Code
  • 相关阅读:
    Populating Next Right Pointers in Each Node II
    Populating Next Right Pointers in Each Node
    Construct Binary Tree from Preorder and Inorder Traversal
    Construct Binary Tree from Inorder and Postorder Traversal
    Path Sum
    Symmetric Tree
    Solve Tree Problems Recursively
    632. Smallest Range(priority_queue)
    609. Find Duplicate File in System
    poj3159最短路spfa+邻接表
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/5692819.html
Copyright © 2011-2022 走看看