JSP 영상처리 프로그램 만들기(.jsp코드)

kys·2022년 9월 29일
0

JSP

목록 보기
3/3
<%@ 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=ISO-8859-1">
<title>Color Image Processing - Server (RC 1)</title>
</head>
<body>
	<%!////////////
	// 전역 변수부 // 
	///////////
	int inImage[][][];
	int inH, inW;
	int outImage[][][];
	int outH, outW;
	File inFp, outFp;

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

	/////////////
	//영상 처리 함수부 // 
	/////////////
	public void reverseImage() {
		// 반전 영상

		// (중요!) 출력 영상의 크기 결정 (알고리즘에 의존)
		outH = inH;
		outW = inW;

		outImage = new int[3][outH][outW];

		// ** Image Processing Algorithm **
		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < inH; i++) {
				for (int k = 0; k < inW; k++) {
					outImage[rgb][i][k] = 255 - inImage[rgb][i][k];
				}
			}
		}
	}

	public void addImage() {
		outH = inH;
		outW = inW;

		outImage = new int[3][outH][outW];

		int value = Integer.parseInt(para1);

		// * Image Processing Algorithm **
		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < inH; i++) {
				for (int k = 0; k < inW; k++) {
					if (inImage[rgb][i][k] + value > 255) {
						outImage[rgb][i][k] = 255;
					} else if (inImage[rgb][i][k] + value < 0) {
						outImage[rgb][i][k] = 0;
					} else {
						outImage[rgb][i][k] = inImage[rgb][i][k] + value;
					}
				}
			}
		}
	}

	public void grayImage() {
		// 반전 영상

		// (중요!) 출력 영상의 크기 결정 (알고리즘에 의존)
		outH = inH;
		outW = inW;

		outImage = new int[3][outH][outW];

		// ** Image Processing Algorithm **

		for (int i = 0; i < inH; i++) {
			for (int k = 0; k < inW; k++) {
				int sumvalue = inImage[0][i][k] + inImage[1][i][k] + inImage[2][i][k];
				int avgvalue = sumvalue / 3;

				outImage[0][i][k] = avgvalue;
				outImage[1][i][k] = avgvalue;
				outImage[2][i][k] = avgvalue;
			}
		}
	}

	public void bwImage() {
		// (중요!) 출력 영상의 크기 결정 (알고리즘에 의존)
		outH = inH;
		outW = inW;

		outImage = new int[3][outH][outW];

		// ** Image Processing Algorithm **

		for (int i = 0; i < inH; i++) {
			for (int k = 0; k < inW; k++) {
				int sumvalue = inImage[0][i][k] + inImage[1][i][k] + inImage[2][i][k];
				int avgvalue = sumvalue / 3;

				if (avgvalue > 127) {
					outImage[0][i][k] = 255;
					outImage[1][i][k] = 255;
					outImage[2][i][k] = 255;
				} else {
					outImage[0][i][k] = 0;
					outImage[1][i][k] = 0;
					outImage[2][i][k] = 0;
				}
			}
		}
	}

	public void bwavgImage() {
		outH = inH;
		outW = inW;

		int sum = 0;
		int avg = 0;
		int sumvalue = 0;
		int avgvalue = 0;

		outImage = new int[3][outH][outW];

		for (int i = 0; i < inH; i++) {
			for (int k = 0; k < inW; k++) {
				sumvalue = inImage[0][i][k] + inImage[1][i][k] + inImage[2][i][k];
				avgvalue = sumvalue / 3;
				sum += avgvalue;
			}
		}

		avg = sum / (inH * inW);

		// * Image Processing Algorithm **

		for (int i = 0; i < inH; i++) {
			for (int k = 0; k < inW; k++) {
				sumvalue = inImage[0][i][k] + inImage[1][i][k] + inImage[2][i][k];
				avgvalue = sumvalue / 3;

				if (avgvalue > avg) {
					outImage[0][i][k] = 255;
					outImage[1][i][k] = 255;
					outImage[2][i][k] = 255;
				} else {
					outImage[0][i][k] = 0;
					outImage[1][i][k] = 0;
					outImage[2][i][k] = 0;
				}
			}
		}

	}

	public void mulImage() {

		outH = inH;
		outW = inW;

		outImage = new int[3][outH][outW];

		int value = Integer.parseInt(para1);

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < inH; i++) {
				for (int k = 0; k < inW; k++) {
					if (inImage[rgb][i][k] * value > 255) {
						outImage[rgb][i][k] = 255;
					} else if (inImage[rgb][i][k] * value < 0) {
						outImage[rgb][i][k] = 0;
					} else {
						outImage[rgb][i][k] = inImage[rgb][i][k] * value;
					}
				}
			}
		}
	}

	public void divImage() {
		outH = inH;
		outW = inW;
		int value = 0;

		outImage = new int[3][outH][outW];

		value = Integer.parseInt(para1);

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < inH; i++) {
				for (int k = 0; k < inW; k++) {
					if (inImage[rgb][i][k] / value > 255) {
						outImage[rgb][i][k] = 255;
					} else if (inImage[rgb][i][k] / value < 0) {
						outImage[rgb][i][k] = 0;
					} else {
						outImage[rgb][i][k] = inImage[rgb][i][k] / value;
					}
				}
			}
		}

	}

	public void lrImage() {
		outH = inH;
		outW = inW;

		outImage = new int[3][outH][outW];

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < outH; i++) {
				for (int k = 0; k < outW; k++) {
					outImage[rgb][i][k] = inImage[rgb][inH - i - 1][k];
				}
			}
		}
	}

	public void udImage() {
		outH = inH;
		outW = inW;

		outImage = new int[3][outH][outW];

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < outH; i++) {
				for (int k = 0; k < outW; k++) {
					outImage[rgb][i][k] = inImage[rgb][i][inW - k - 1];
				}
			}
		}
	}

	public void zoomoutImage() {
		outH = inH;
		outW = inW;

		outImage = new int[3][outH][outW];

		int value = Integer.parseInt(para1);
		outH = (int) (inH / value);
		outW = (int) (inW / value);

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < inH; i++) {
				for (int k = 0; k < inW; k++) {
					outImage[rgb][(int) (i / value)][(int) (k / value)] = inImage[rgb][i][k];
				}
			}
		}
	}

	public void zoominImage() {
		outH = inH;
		outW = inW;

		int value = Integer.parseInt(para1);
		outH = (int) (inH * value);
		outW = (int) (inW * value);

		outImage = new int[3][outH][outW];

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < inH; i++) {
				for (int k = 0; k < inW; k++) {
					outImage[rgb][(int) (i * value)][(int) (k * value)] = inImage[rgb][i][k];
				}
			}
		}
	}

	public void zoomin2Image() {
		outH = inH;
		outW = inW;

		int value = Integer.parseInt(para1);
		outH = (int) (inH * value);
		outW = (int) (inW * value);

		outImage = new int[3][outH][outW];

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < outH; i++) {
				for (int k = 0; k < outW; k++) {
					outImage[rgb][i][k] = inImage[rgb][(int) (i / value)][(int) (k / value)];
				}
			}
		}
	}

	public void moveImage() {
		outH = inH;
		outW = inW;

		int x = Integer.parseInt(para1);
		int y = Integer.parseInt(para2);

		outImage = new int[3][outH][outW];

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < inH - y; i++) {
				for (int k = 0; k < inW - x; k++) {
					outImage[rgb][i + y][k + x] = inImage[rgb][i][k];
				}
			}
		}
	}

	public void gammaImage() {
		outH = inH;
		outW = inW;

		int gamma = Integer.parseInt(para1);

		outImage = new int[3][outH][outW];

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < inH; i++) {
				for (int k = 0; k < inW; k++) {
					outImage[rgb][i][k] = (int) (255 * Math.pow(inImage[rgb][i][k] / 255, gamma));
				}
			}
		}
	}

	public void rotateImage() {
		int value = Integer.parseInt(para1);
		double radian = (value * Math.PI) / 180;
		int centerH = inH / 2;
		int centerW = inW / 2;

		outH = inH;
		outW = inW;

		outImage = new int[3][outH][outW];

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < outH; i++) {
				for (int k = 0; k < outW; k++) {
					int newH = (int) ((k - centerH) * Math.cos(radian) + (i - centerW) * Math.sin(radian) + centerH);
					int newW = (int) ((i - centerW) * Math.cos(radian) - (k - centerH) * Math.sin(radian) + centerW);

					if ((0 <= newW && newW < inH) && (0 <= newH && newH < inW)) {
						outImage[rgb][i][k] = inImage[rgb][newW][newH];
					} else {
						outImage[rgb][i][k] = 255;
					}
				}
			}
		}
	}

	public void rotate2Image() {
		int value = Integer.parseInt(para1);
		double radian = (value * Math.PI) / 180;

		outH = (int) (Math.abs(Math.cos(radian) * inH) + Math.abs(Math.cos(((90 * Math.PI) / 180) - radian) * inW));
		outW = (int) (Math.abs(Math.cos(radian) * inW) + Math.abs(Math.cos(((90 * Math.PI) / 180) - radian) * inH));

		int centerH = outH / 2;
		int centerW = outW / 2;

		outImage = new int[3][outH][outW];

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < outH; i++) {
				for (int k = 0; k < outW; k++) {
					int newH = (int) ((k - centerH) * Math.cos(radian) + (i - centerW) * Math.sin(radian)
							+ ((centerH / outW) * inW));
					int newW = (int) ((i - centerW) * Math.cos(radian) - (k - centerH) * Math.sin(radian)
							+ ((centerW / outH) * inH));

					if (newH < 0 || newH >= outH) {
						outImage[rgb][i][k] = 0;
					} else if (newW < 0 || newW >= outW) {
						outImage[rgb][i][k] = 0;
					} else {
						outImage[rgb][i][k] = inImage[rgb][newW][newH];
					}

				}
			}
		}
	}

	public void paracupImage() {
		outH = inH;
		outW = inW;

		outImage = new int[3][outH][outW];

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < outH; i++) {
				for (int k = 0; k < outW; k++) {
					outImage[rgb][i][k] = (int)((255.0) * Math.pow((inImage[rgb][i][k] / 127.0 - 1), 2));
				}
			}
		}
	}

	public void paracapImage() {
		outH = inH;
		outW = inW;

		outImage = new int[3][outH][outW];

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < inH; i++) {
				for (int k = 0; k < inW; k++) {
					outImage[rgb][i][k] = (int)(255.0 - (255.0 * Math.pow((inImage[rgb][i][k] / 127.0 - 1), 2)));
				}
			}
		}
	}

	public void embossImage() {
		outH = inH;
		outW = inW;
		outImage = new int[3][outH][outW];

		double mask[][] = { { -1.0, 0.0, 0.0 }, { 0.0, 0.0, 0.0 }, { 0.0, 0.0, 1.0 } };

		double tmpInImage[][][] = new double[3][outH + 2][outW + 2];

		int tmpOutImage[][][] = new int[3][outH][outW];

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < inH + 2; i++) {
				for (int k = 0; k < inW + 2; k++) {
					tmpInImage[rgb][i][k] = 127.0;
				}
			}
		}

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < inH; i++) {
				for (int k = 0; k < inW; k++) {
					tmpInImage[rgb][i + 1][k + 1] = inImage[rgb][i][k];
				}
			}
		}

		//** Image Processing Algorithm **
		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < inH; i++) {
				for (int k = 0; k < inW; k++) {
					double S = 0.0;
					for (int m = 0; m < 3; m++) {
						for (int n = 0; n < 3; n++) {
							S += tmpInImage[rgb][i + m][k + n] * mask[m][n];
						}
						tmpOutImage[rgb][i][k] = (int) S;
					}
				}
			}
		}

		//sum=1
		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < outH; i++) {
				for (int k = 0; k < outW; k++) {
					tmpOutImage[rgb][i][k] += 127.0;
				}
			}
		}

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < outH; i++) {
				for (int k = 0; k < outW; k++) {
					if (tmpOutImage[rgb][i][k] > 255.0) {
						outImage[rgb][i][k] = 255;
					} else if (tmpOutImage[rgb][i][k] < 0.0) {
						outImage[rgb][i][k] = 0;
					} else {
						outImage[rgb][i][k] = (int) tmpOutImage[rgb][i][k];
					}
				}
			}
		}
	}

	public void blurImage() {
		outH = inH;
		outW = inW;
		outImage = new int[3][outH][outW];

		double mask[][] = { { 1.0 / 9, 1.0 / 9, 1.0 / 9 }, { 1.0 / 9, 1.0 / 9, 1.0 / 9 },
				{ 1.0 / 9, 1.0 / 9, 1.0 / 9 } };

		double tmpInImage[][][] = new double[3][outH + 2][outW + 2];

		int tmpOutImage[][][] = new int[3][outH][outW];

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < inH + 2; i++) {
				for (int k = 0; k < inW + 2; k++) {
					tmpInImage[rgb][i][k] = 127.0;
				}
			}
		}

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < inH; i++) {
				for (int k = 0; k < inW; k++) {
					tmpInImage[rgb][i + 1][k + 1] = inImage[rgb][i][k];
				}
			}
		}

		//** Image Processing Algorithm **
		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < inH; i++) {
				for (int k = 0; k < inW; k++) {
					double S = 0.0;
					for (int m = 0; m < 3; m++) {
						for (int n = 0; n < 3; n++) {
							S += tmpInImage[rgb][i + m][k + n] * mask[m][n];
						}
						tmpOutImage[rgb][i][k] = (int) S;
					}
				}
			}
		}

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < outH; i++) {
				for (int k = 0; k < outW; k++) {
					if (tmpOutImage[rgb][i][k] > 255.0) {
						outImage[rgb][i][k] = 255;
					} else if (tmpOutImage[rgb][i][k] < 0.0) {
						outImage[rgb][i][k] = 0;
					} else {
						outImage[rgb][i][k] = (int) tmpOutImage[rgb][i][k];
					}
				}
			}
		}
	}

	public void sharpeImage() {
		outH = inH;
		outW = inW;
		outImage = new int[3][outH][outW];

		double mask[][] = { { -0.0, -1.0, 0.0 }, { -1.0, 5.0, -1.0 }, { 0.0, -1.0, 0.0 } };

		double tmpInImage[][][] = new double[3][outH + 2][outW + 2];

		int tmpOutImage[][][] = new int[3][outH][outW];

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < inH + 2; i++) {
				for (int k = 0; k < inW + 2; k++) {
					tmpInImage[rgb][i][k] = 127.0;
				}
			}
		}

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < inH; i++) {
				for (int k = 0; k < inW; k++) {
					tmpInImage[rgb][i + 1][k + 1] = inImage[rgb][i][k];
				}
			}
		}

		//** Image Processing Algorithm **
		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < inH; i++) {
				for (int k = 0; k < inW; k++) {
					double S = 0.0;
					for (int m = 0; m < 3; m++) {
						for (int n = 0; n < 3; n++) {
							S += tmpInImage[rgb][i + m][k + n] * mask[m][n];
						}
						tmpOutImage[rgb][i][k] = (int) S;
					}
				}
			}
		}

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < outH; i++) {
				for (int k = 0; k < outW; k++) {
					if (tmpOutImage[rgb][i][k] > 255.0) {
						outImage[rgb][i][k] = 255;
					} else if (tmpOutImage[rgb][i][k] < 0.0) {
						outImage[rgb][i][k] = 0;
					} else {
						outImage[rgb][i][k] = (int) tmpOutImage[rgb][i][k];
					}
				}
			}
		}
	}

	public void gaussianImage() {
		outH = inH;
		outW = inW;
		outImage = new int[3][outH][outW];

		double mask[][] = { { 1.0 / 16, 1.0 / 8, 1.0 / 16 }, 
						  { 1.0 / 8, 1.0 / 4, 1.0 / 8 },
				          { 1.0 / 16, 1.0 / 8, 1.0 / 16 } };

		double tmpInImage[][][] = new double[3][outH + 2][outW + 2];

		int tmpOutImage[][][] = new int[3][outH][outW];

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < inH + 2; i++) {
				for (int k = 0; k < inW + 2; k++) {
					tmpInImage[rgb][i][k] = 127.0;
				}
			}
		}

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < inH; i++) {
				for (int k = 0; k < inW; k++) {
					tmpInImage[rgb][i + 1][k + 1] = inImage[rgb][i][k];
				}
			}
		}

		//** Image Processing Algorithm **
		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < inH; i++) {
				for (int k = 0; k < inW; k++) {
					double S = 0.0;
					for (int m = 0; m < 3; m++) {
						for (int n = 0; n < 3; n++) {
							S += tmpInImage[rgb][i + m][k + n] * mask[m][n];
						}
						tmpOutImage[rgb][i][k] = (int) S;
					}
				}
			}
		}

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < outH; i++) {
				for (int k = 0; k < outW; k++) {
					if (tmpOutImage[rgb][i][k] > 255.0) {
						outImage[rgb][i][k] = 255;
					} else if (tmpOutImage[rgb][i][k] < 0.0) {
						outImage[rgb][i][k] = 0;
					} else {
						outImage[rgb][i][k] = (int) tmpOutImage[rgb][i][k];
					}
				}
			}
		}
	}

	public void endinImage() {
		outH = inH;
		outW = inW;
		outImage = new int[3][outH][outW];

		int LOW = inImage[0][0][0], HIGH = inImage[0][0][0];

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < inH; i++) {
				for (int k = 0; k < inW; k++) {
					if (LOW > inImage[rgb][i][k]) {
						LOW = inImage[rgb][i][k];
					}
					if (HIGH < inImage[rgb][i][k]) {
						HIGH = inImage[rgb][i][k];
					}
				}
			}
		}

		LOW += 50;
		HIGH += 50;

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < inH; i++) {
				for (int k = 0; k < inW; k++) {
					double out = (double) ((inImage[rgb][i][k] - LOW) * 255 / (HIGH - LOW));

					if (out < 0.0) {
						out = 0;
					} else if (out > 255.0) {
						out = 255;
					} else {
						out = (int) out;
					}

					outImage[rgb][i][k] = (int) out;
				}
			}
		}
	}

	public void stretchImage() {
		outH = inH;
		outW = inW;
		outImage = new int[3][outH][outW];

		int LOW = inImage[0][0][0], HIGH = inImage[0][0][0];

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < inH; i++) {
				for (int k = 0; k < inW; k++) {
					if (LOW > inImage[rgb][i][k]) {
						LOW = inImage[rgb][i][k];
					}
					if (HIGH < inImage[rgb][i][k]) {
						HIGH = inImage[rgb][i][k];
					}
				}
			}
		}

		for (int rgb = 0; rgb < 3; rgb++) {
			for (int i = 0; i < inH; i++) {
				for (int k = 0; k < inW; k++) {
					double out = (double) ((inImage[rgb][i][k] - LOW) * 255 / (HIGH - LOW));

					if (out < 0.0) {
						out = 0;
					} else if (out > 255.0) {
						out = 255;
					} else {
						out = (int) out;
					}

					outImage[rgb][i][k] = (int) out;
				}
			}
		}
	}

	public void equalizseImage(){
		outH=inH;
		outW=inW;

		outImage = new int[3][outH][outW];
		int histoR[] = new int[256];
		int histoG[] = new int[256];
		int histoB[] = new int[256];
		

		for(int i=0;i<inH;i++)
		 	for(int k=0;k<inW;k++){
		 		histoR[inImage[0][i][k]]++;
				histoG[inImage[1][i][k]]++;
				histoB[inImage[2][i][k]]++;
		 	}
		int sumHistoR[] = new int[256];
		int sumHistoG[] = new int[256];
		int sumHistoB[] = new int[256];
		
		for(int i=0;i<256;i++){
		 	sumHistoR[i]=0;
			sumHistoG[i]=0;
			sumHistoB[i]=0;
		}
		int sumValueR=0;
		int sumValueG=0;
		int sumValueB=0;

		for(int i=0;i<256;i++){
		 	sumValueR += histoR[i];
		 	sumHistoR[i]=sumValueR;
		 	
			sumValueG += histoG[i];
		 	sumHistoG[i]=sumValueG;
		 	
			sumValueB += histoB[i];
		 	sumHistoB[i]=sumValueB;
		}

		double normalHistoR[] = new double[256];
		double normalHistoG[] = new double[256];
		double normalHistoB[] = new double[256];
		
		for(int i=0;i<256;i++){
			normalHistoR[i]=0.0;
			normalHistoG[i]=0.0;
			normalHistoB[i]=0.0;
		}

		for(int i=0;i<256;i++){
		 	double normalR = sumHistoR[i]*(1.0/(inH*inW))*255.0;
		 	normalHistoR[i] = normalR;
		 	double normalG = sumHistoG[i]*(1.0/(inH*inW))*255.0;
		 	normalHistoG[i] = normalG;
		 	double normalB = sumHistoB[i]*(1.0/(inH*inW))*255.0;
		 	normalHistoB[i] = normalB;
		}
		for(int i=0;i<inH;i++){
		 	for(int k=0;k<inW;k++){
		 		outImage[0][i][k]=(int)normalHistoR[inImage[0][i][k]];
		 		outImage[1][i][k]=(int)normalHistoG[inImage[1][i][k]];
		 		outImage[2][i][k]=(int)normalHistoB[inImage[2][i][k]];
		 	}
		}
	}
	%>

	<%
		/////////////
		// 메인 코드부 ///
		////////////

		// (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);

		FileInputStream inFs = new FileInputStream(inFp.getPath());

		// (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 --> 0000FF --> F3
				int g = (rgb >> 8) & 0xFF; // >> 1Byte --> 0000FF --> 77
				int b = (rgb >> 0) & 0xFF; // >> 2Byte --> 0000FF --> D6

				inImage[0][i][k] = r;
				inImage[1][i][k] = g;
				inImage[2][i][k] = b;
			}
		}

		// Image Processing
		switch (algo) {
		case "101":
			reverseImage();
			break;
		case "102":
			addImage();
			break;
		case "103":
			grayImage();
			break;
		case "104":
			bwImage();
			break;
		case "105":
			bwavgImage();
			break;
		case "106":
			mulImage();
			break;
		case "107":
			divImage();
			break;
		case "108":
			lrImage();
			break;
		case "109":
			udImage();
			break;
		case "110":
			zoomoutImage();
			break;

		case "201":
			zoominImage();
			break;
		case "202":
			zoomin2Image();
			break;
		case "203":
			moveImage();
			break;
		case "204":
			gammaImage();
			break;
		case "205":
			rotateImage();
			break;
		case "206":
			rotate2Image();
			break;
		case "207":
			paracupImage();
			break;
		case "208":
			paracapImage();
			break;
		case "209":
			embossImage();
			break;

		case "301":
			blurImage();
			break;
		case "302":
			sharpeImage();
			break;
		case "303":
			gaussianImage();
			break;
		case "304":
			endinImage();
			break;
		case "305":
			stretchImage();
			break;
		case "306":
			equalizseImage();
			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 px = 0;

				int r = outImage[0][i][k]; // F3
				int g = outImage[1][i][k]; // 77
				int b = outImage[2][i][k]; // D6

				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.101:8080/";
		url += "GrayImageProcessing/download.jsp?file=";
		url += "out_" + filename + "'> !! 다운로드 !! </a></h2>";

		out.println(url);
	%>
</body>
</html>
profile
:)

0개의 댓글