note

이미지 픽셀단위로 비율에 맞게 리사이징 하기 / 썸네일 본문

JSP/기본

이미지 픽셀단위로 비율에 맞게 리사이징 하기 / 썸네일

투한 2012. 3. 16. 23:14





흔히 배율로 리사이징 하는 코드는 검색하면 수두룩하게 나옵니다(물론 이코드는 거기서 수정만했음)

하지만 픽셀의 크기를 정확하게 줘야하는 경우(레이아웃 깨짐 방지를 위한)

width 값과 height 값을 줘야하는데 둘다 고정으로 하는 경우에는 상당히 저질 스러운 이미지를 보게 될 확률이 높습니다

그래서 둘중의 값 하나만 height나 width 를 정해둔뒤 (이것은 가변적 세로 이미지와 가로 이미지가 있기 때문)

하나의 값은 배율에 맞게 리사이징을 하는 겁니다









섬네일 생성됨  




원본







세로로 돌려서 테스트



잘나옴








	public static String createThumbnail(String uploadedFile,String thumbnailFile, int zoom){
		FileInputStream fs = null; 
		try { 
			System.out.println("썸네일 이미지 만들기");
			fs = new FileInputStream(FileUtil.UPLOAD_PATH+"/"+uploadedFile);
			BufferedImage im = ImageIO.read(fs);


			
			// 가로, 세로 최대 사이즈 설정
			int maxWidth =  zoom;   // 원하는대로 설정. 픽셀로 하려면 maxWidth = 100  이런 식으로 입력
			int maxHeight = zoom;   // 원래 사이즈 * 0.5 = 50%

			//리사이즈 크기
			int resizeWidth;
			int resizeHeight;

			// 가로나 세로의 길이가 최대 사이즈보다 크면 실행  
			if(im.getWidth()>zoom || im.getHeight() > zoom){

				// 가로가 세로보다 크면 가로는 최대사이즈로, 세로는 비율 맞춰 리사이즈
				if(im.getWidth() > im.getHeight()){
					resizeWidth = maxWidth;
					resizeHeight = Math.round((im.getHeight()  * zoom) / im.getWidth());

					// 세로가 가로보다 크면 세로는 최대사이즈로, 가로는 비율 맞춰 리사이즈
				}else{
					resizeHeight = maxHeight;
					resizeWidth = Math.round((im.getWidth() * zoom) / im.getHeight());
				}

				// 최대사이즈보다 작으면 원본 그대로
			}else{
				resizeWidth = im.getWidth();
				resizeHeight = im.getHeight();
			}

			int width = resizeWidth;
			int height = resizeHeight;

			BufferedImage thumb = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
			Graphics2D 	g2 = thumb.createGraphics();

			g2.drawImage(im, 0, 0, width, height, null);
			ImageIO.write(thumb, "jpg", new File(FileUtil.UPLOAD_PATH,thumbnailFile));
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				fs.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return thumbnailFile;
	}


사용하기 쉽게 static 하게 작성했기에 클래스명.createThumbnail(업로드된 파일명,바꾸고 싶은 파일명,바뀔 픽셀값);

정도로 하면 됩니다 

물론 파일명이 리턴됩니다

하지만 바꾸고 싶은 파일명은 원래 업로드된 파일명에 앞이나 뒤에 문자열을 하나 붙이면 되기에
리턴 되는값은 구지(굳이?) 필요 없지 않을까 생각됩니다

업로드된 파일명에 바꾸고 싶은 파일명만 문자열만 추가 하면 될테니까요 :-) 








'JSP > 기본' 카테고리의 다른 글

JAVA 임시 비밀번호 생성  (0) 2012.05.07
위도 경도 거리 계산  (2) 2012.04.17
날짜 며칠전 / 몇분전 / 몇년전 으로 치환  (0) 2012.03.13
JSP - Oracle Clob 사용법  (0) 2012.02.20
갤러리 게시판 프로그램  (0) 2012.02.17