본문 바로가기

JSP환경에서 OpenCV없는 컬러영상처리

JSP에서 이미지 받아오기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@page import="java.io.*" %>
    <%@ page import="java.util.*" %>
	<%@ page import="com.oreilly.servlet.*" %>
	<%@ page import="com.oreilly.servlet.multipart.*" %>
	<%@ page import="javax.imageio.*" %>
	<%@ page import="java.awt.image.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%!
///////////////////////
//전역변수부
//////////////////////
int[][][] inImage;
int inH,inW;
int[][][] outImage;
static int outH,outW;
File inFp,outFp;

float[] rgb = new float[3];
float[] hsv = new float[3];
float[] abc = new float[3];
float[] def = new float[3];

//Parameter Variable
String algo, para1, para2;
String inFname, outFname;

/////////////////////
알고리즘 처리 함수가 들어갈 영역
//////////////////////
%>

<%
//////////////////////////////
//메인코드부
/////////////////////////////
//(0)파라미터 넘겨 받기
MultipartRequest multi = new MultipartRequest(request, "C:/Upload", 
		5*1024*1024, "utf-8", new DefaultFileRenamePolicy());

String tmp;
Enumeration params = multi.getParameterNames(); //주의! 파라미터 순서가 반대
tmp = (String) params.nextElement();
para2 = multi.getParameter(tmp);
tmp = (String) params.nextElement();
para1 = multi.getParameter(tmp);
tmp = (String) params.nextElement();
algo = multi.getParameter(tmp);
// File
Enumeration files = multi.getFileNames(); // 여러개 파일
tmp = (String) files.nextElement(); // 첫 파일 한개
String filename = multi.getFilesystemName(tmp);// 파일명을 추출

//(1)입력 영상 파일 처리
inFp = new File("C:/Upload/"+filename);
BufferedImage bImage = ImageIO.read(inFp);
//(2)파일 --> 메모리
//중요! 입력 영상의 폭과 높이를 알아내야함!
inW = bImage.getHeight();
inH = bImage.getWidth();
//메모리 할당
inImage = new int[3][inH][inW];

//읽어오기
for(int i=0; i<inH; i++) {
	for (int k=0; k<inW; k++) {
		int rgb = bImage.getRGB(i,k);  // F377D6 
		int r = (rgb >> 16) & 0xFF; // >>2Byte --->0000F3 & 0000FF --> F3
		int g = (rgb >> 8) & 0xFF; // >>1Byte --->00F377 & 0000FF --> 77			
		int b = (rgb >> 0) & 0xFF; // >>0Byte --->F377D6 & 0000FF --> D6
		inImage[0][i][k] = r;
		inImage[1][i][k] = g;
		inImage[2][i][k] = b;
	}
}

//Image Processing
switch(algo){
case "101"://동일영상
	equalImage();break;
case "102"://반전영상
	reverseImage();break;
case "103"://영상 더하기/빼기
	addImage();break;
case "104"://영상 곱하기
	gopImage();break;
case "105"://영상 나누기
	divImage();break;
case "106"://흑백127기준
	image127();break;
case "107"://흑백 평균 기준
	avgImage();break;
case "108"://파라볼라 컵
	paraCupImage();break;
case "109"://파라볼라 캡
	paraCapImage();break;
case "110"://감마
	gammaImage();break;
	
	
case "201"://상하미러링
	udImage();break;
case "202"://좌우미러링
	lrImage();break;
case "203"://영상이동
	swapImage();break;
case "204"://영상 시계방향회전
	rotateImage();break;
case "205"://영상 반시계방향 회전
	spinImage();break;
case "207"://영상축소
	zoomOutImage();break;
case "208"://영상확대
	zoomInImage();break;
case "209"://영상확대(백워딩)
	zoomInImage2();break;
	
	
case "301"://엠보싱
	embossingImage();break;
case "302"://블러링
	blurrImage();break;
case "303"://샤프닝
	sharpenImage();break;
case "304"://가우시안
	gaussianImage();break;
case "305"://고주파 샤프닝
	hpfSharpImage();break;
case "306"://이동과 차분
	sadImage();break;
case "307"://유사연산자
	opImage();break;
case "308"://로버츠 알고리즘
	robertsImage();break;
case "309"://소벨 알고리즘
	sobelImage();break;
case "310"://프리윗 알고리즘
	prewittImage();break;
case "311"://라플라시안 알고리즘
	laplacianImage();break;
case "312"://로그 알고리즘
	logImage();break;
case "313"://도그 알고리즘
	dogImage();break;
	
	
case "401"://스트레칭
	strechImage();break;
case "402"://엔드-인
	endInImage();break;
case "403"://평활화
	equalizeImage();break;
	
	
case "501"://채도변환
	saturImage();break;
case "502"://그레이스케일
	grayImage();break;
case "503"://명도변환
	intensityImage();break;
case "504"://오렌지이미지추출
	orangeImage();break;
	

}
//(4)결과를 파일로 저장하기
outFp = new File("C:/out/out_"+filename);

BufferedImage oImage 
= new BufferedImage(outH, outW, BufferedImage.TYPE_INT_RGB); // Empty Image
//Memory --> File
for (int i=0; i< outH; i++) {
for (int k=0; k< outW; k++) {
	int r = outImage[0][i][k];  // F3
	int g = outImage[1][i][k];  // 77
	int b = outImage[2][i][k];  // D6
	int px = 0;
	px = px | (r << 16);  // 000000 | (F30000) --> F30000
	px = px | (g << 8);   // F30000 | (007700) --> F37700
	px = px | (b << 0);   // F37700 | (0000D6) --> F377D6
	oImage.setRGB(i,k,px);
}
}
ImageIO.write(oImage, "jpg", outFp);

out.println("<h1>" + filename + " 영상 처리 완료 !! </h1>");
String url="<p><h2><a href='http://192.168.56.102:8080/";
url += "GrayImageProcessing/download.jsp?file="; 
url += "out_" + filename + "'> !! 다운로드 !! </a></h2>";

out.println(url);


%>

</body>
</html>