자바 이미지 슬라이딩 검증(로그 인 검증)원리 와 실현 방법 상세 설명

본 고의 실례 는 자바 이미지 슬라이딩 검증(로그 인 검증)의 원리 와 실현 방법 을 설명 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
이것 은 제 가 간단하게 만 든 효과 그림 입 니 다.300 X150px 의 검사 도 를 처리 하고 그림 을 전단 으로 보 냅 니 다.50 밀리초 정도 걸 리 지만 속도 가 매우 빠 릅 니 다.
 
원리:
1.자바 를 이용 하여 큰 그림 에서 작은 그림 을 무 작위 로 파 내 고 큰 그림 에서 작은 그림 을 파 낸 위치 에 음영 을 주 고 이 두 그림 을 전단 으로 되 돌려 줍 니 다.
2.전단 에서 그림 을 가 져 옵 니 다.사용 자 는 작은 그림 을 그림자 의 위치 로 미 끄 러 뜨리 고 작은 그림 이 미 끄 러 지 는 거 리 를 가 져 와 자바 배경 에 되 돌려 검사 합 니 다.
3.검 사 를 통과 하고 검 사 를 통과 한 번 호 를 되 돌려 줍 니 다.
4.프론트 엔 드 에서 로그 인 인 인 터 페 이 스 를 바 꾸 고 계 정,비밀번호,검사 번 호 를 자바 백 엔 드 로 전송 하여 로그 인 합 니 다.
실현:
1.필요 한 작은 그림 의 윤곽 을 계산 하고 2 차원 배열 로 표시 합 니 다.2 차원 배열 은 두 장의 값 이 있 고 0 과 1 이 있 습 니 다.그 중에서 0 은 색 이 없다 는 것 을 나타 내 고 1 은 색 이 있 습 니 다.다음 과 같은 그림 입 니 다.제 가 그림 의 윤곽 을 파 려 면 다음 과 같 습 니 다.

왼쪽 과 아래 에 반원 이 있 는데 이것 은 원 의 공식 에 따라 하면 됩 니 다.코드 예제:

static int targetLength=55;//   
static int targetWidth=45;//   
static int circleR=6;//  
static int r1=3;//   
/**
 * 
* @Createdate: 2019 1 24   10:52:42
* @Title: getBlockData
* @Description:       
* @author mzl
* @return int[][]
* @throws
 */
private static int[][] getBlockData() {
    int[][] data = new int[targetLength][targetWidth];
    double x2 = targetLength-circleR;
    //        
    double h1 = circleR + Math.random() * (targetWidth-3*circleR-r1);
    double po = circleR*circleR;
    double xbegin = targetLength-circleR-r1;
    double ybegin = targetWidth-circleR-r1;
    for (int i = 0; i < targetLength; i++) {
        for (int j = 0; j < targetWidth; j++) {
            double d3 = Math.pow(i - x2,2) + Math.pow(j - h1,2);
            double d2 = Math.pow(j-2,2) + Math.pow(i - h1,2);
            if ((j <= ybegin && d2 <= po)||(i >= xbegin && d3 >= po)) {
                data[i][j] = 0;
            } else {
                data[i][j] = 1;
            }
        }
    }
    return data;
}

2.계산 처리 한 작은 그림 의 윤곽 에 따라 큰 그림 에 그림 을 그린다.

/**
 * 
* @Createdate: 2019 1 24   10:51:30
* @Title: cutByTemplate
* @Description:      、        
* @author mzl
* @param oriImage
* @param targetImage
* @param templateImage
* @param x
* @param y void
* @throws
 */
private static void cutByTemplate(BufferedImage oriImage,BufferedImage targetImage, int[][] templateImage, int x,int y){
    for (int i = 0; i < targetLength; i++) {
        for (int j = 0; j < targetWidth; j++) {
            int rgb = templateImage[i][j];
            //            
            int rgb_ori = oriImage.getRGB(x + i, y + j);
            if (rgb == 1) {
      //          
                targetImage.setRGB(i, j, rgb_ori);
      //          
                oriImage.setRGB(x + i, y + j, rgb_ori & 0x363636 );
            }else{
                //         
                targetImage.setRGB(i, j, rgb_ori & 0x00ffffff);
            }
        }
    }
}

3.큰 그림 의 작은 그림 을 base 64 야드 로 돌려 서 프론트 엔 드 에 쉽게 되 돌려 줍 니 다.

/**
 * 
* @Createdate: 2019 1 24   11:49:42
* @Title: createImage
* @Description:     ,  Base64 
* @author mzl
* @param url
* @return Map<String,String>
* @throws
 */
public static Map<String,String> createImage(String url,int L,int W,Map<String,String> resultMap){
     try {
         BufferedImage bufferedImage = ImageIO.read(new FileInputStream(url));
         BufferedImage target= new BufferedImage(targetLength, targetWidth, BufferedImage.TYPE_4BYTE_ABGR);
         cutByTemplate(bufferedImage,target,getBlockData(),L,W);
         resultMap.put("b", getImageBASE64(bufferedImage));//  
         resultMap.put("s", getImageBASE64(target));//  
    } catch (IOException e) {
        e.printStackTrace();
    }finally{
        return resultMap;
    }
}
/**
* 
* @Createdate: 2019 1 24   11:14:19
* @Title: getImageStr
* @Description:    BASE64
* @author mzl
* @param image
* @return
* @throws IOException String
* @throws
*/
public static String getImageBASE64(BufferedImage image) throws IOException {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        ImageIO.write(image,"png",out);
        byte[] b = out.toByteArray();//  byte  
    BASE64Encoder encoder = new BASE64Encoder();
    return encoder.encode(b);//  base64   
}

이 그림 에서 핵심 코드 를 검증 하 였 습 니 다.
자바 알고리즘 과 관련 된 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 의 자바 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기