자바 이미지 슬라이딩 검증(로그 인 검증)원리 와 실현 방법 상세 설명
이것 은 제 가 간단하게 만 든 효과 그림 입 니 다.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
}
이 그림 에서 핵심 코드 를 검증 하 였 습 니 다.자바 알고리즘 과 관련 된 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 의 자바 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.