자바를 이용해 이미지의 사이즈를 조절 하는 예제 입니다.
인터넷에 있는 예제를 3가지 정도 사용해 보았는데 제일 화질이 좋은 방식으로 정리해 봅니다.
설정한 넓이와 높이로 맞출 수 있고 비율로 줄일 수 있습니다. (화질과 속도도 가능, 썸네일 생성할 경우는 화질보단 속도 우선으로)
아래는 이미지 변경한 결과물 입니다.
[비율] 넓이 기준 (넓이 600)
[비율] 높이 기준 (높이 700)
[비율무시] 넓이, 높이 직접 설정 (600*700)
[속도우선] 저화질 (개털됌 ㅋㅋ)
아래는 예제 입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | import java.awt.Graphics; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; public class ImageResize { public static void main(String[] args) { String imgOriginalPath= "C:/test/test.jpg"; // 원본 이미지 파일명 String imgTargetPath= "C:/test/test_resize.jpg"; // 새 이미지 파일명 String imgFormat = "jpg"; // 새 이미지 포맷. jpg, gif 등 int newWidth = 600; // 변경 할 넓이 int newHeight = 700; // 변경 할 높이 String mainPosition = "W"; // W:넓이중심, H:높이중심, X:설정한 수치로(비율무시) Image image; int imageWidth; int imageHeight; double ratio; int w; int h; try{ // 원본 이미지 가져오기 image = ImageIO.read(new File(imgOriginalPath)); // 원본 이미지 사이즈 가져오기 imageWidth = image.getWidth(null); imageHeight = image.getHeight(null); if(mainPosition.equals("W")){ // 넓이기준 ratio = (double)newWidth/(double)imageWidth; w = (int)(imageWidth * ratio); h = (int)(imageHeight * ratio); }else if(mainPosition.equals("H")){ // 높이기준 ratio = (double)newHeight/(double)imageHeight; w = (int)(imageWidth * ratio); h = (int)(imageHeight * ratio); }else{ //설정값 (비율무시) w = newWidth; h = newHeight; } // 이미지 리사이즈 // Image.SCALE_DEFAULT : 기본 이미지 스케일링 알고리즘 사용 // Image.SCALE_FAST : 이미지 부드러움보다 속도 우선 // Image.SCALE_REPLICATE : ReplicateScaleFilter 클래스로 구체화 된 이미지 크기 조절 알고리즘 // Image.SCALE_SMOOTH : 속도보다 이미지 부드러움을 우선 // Image.SCALE_AREA_AVERAGING : 평균 알고리즘 사용 Image resizeImage = image.getScaledInstance(w, h, Image.SCALE_SMOOTH); // 새 이미지 저장하기 BufferedImage newImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); Graphics g = newImage.getGraphics(); g.drawImage(resizeImage, 0, 0, null); g.dispose(); ImageIO.write(newImage, imgFormat, new File(imgTargetPath)); }catch (Exception e){ e.printStackTrace(); } } } |
이클립스 jsp 프로젝트 만들기 (Dynamic Web Project) (0) | 2018.07.07 |
---|---|
문자열에 특수문자 여부 확인 (한글, 영어, 숫자) (0) | 2018.02.23 |
java excel poi (눈금선,병합,배경색,테두리,글씨체,사이즈,금액,천단위) (1) | 2017.09.08 |
Java excel poi 눈금선 없애기 (Gridlines) (0) | 2017.09.08 |
자바의 추상클래스(abstract class)와 인터페이스(interface) (0) | 2017.08.29 |
댓글 영역