Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- JavaScript
- codeigniter
- 공모주
- Oracle
- IPO
- 공모주 청약 일정
- jquery
- 오라클
- 공모주 청약
- linux
- SQL
- 주식 청약
- 코드이그나이터
- php
- 주식 청약 일정
- 리눅스
- java
- 7월 공모주 청약 일정
- Stock
- MYSQL
- Stock ipo
- html
- 자바스크립트
- 제이쿼리
- 자바
- 주식
- 6월 공모주 청약 일정
- 맥
- css
- Eclipse
Archives
- Today
- Total
개발자의 끄적끄적
[java/spring] 이미지 리사이즈 예제 [펌] 본문
728x90
반응형
[java/spring] 이미지 리사이즈 예제 [펌]
자바 이미지 리사이즈
프로필 이미지를 크롭하여 서버에 전달하는데.. 이미지가 너무 고해상도라 이미지를 잘라도 파일 용량이 커 이미지를 로드하는 시간이 길었다.
원인을 해결하기 위해 서버에서 이미지를 줄여서 로드하는 걸로 했다. 잘 됬는데 톰캣8에서는 POST로 데이터를 보내는데 크기가 제한이 되어있어 안되는 경우도 있었다. 그래서 안드로이드에서 이미지를 줄이는 것으로 변경.. 그리고 서버에서도 안드로이드에서 리사이즈했지만 그래도 크기가 큰 것같으면 다시 리사이즈 하는걸로 일단 코드를 작성했다.
2가지 방법으로 각각 서버 또는 안드로이드에 적용했다. 어떤 거는 안드로이드에서 안되더라..
일단 두개를 다 코드 올린다.
샘플코드 1
package test11;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class Test {
private static final int IMG_WIDTH = 300;
private static final int IMG_HEIGHT = 300;
public static void main(String[] args) {
try {
String imgOriginalPath = "C:\\Users\\z\\Desktop\\imagetest\\TEST\\1.jpg"; // 원본 이미지 파일명
String imgTargetPath = "C:\\Users\\z\\Desktop\\imagetest\\TEST\\testimage.png"; // 새 이미지 파일명
File originFile = new File(imgOriginalPath);
System.out.println("originFile Length : " + originFile.length());
BufferedImage originalImage = ImageIO.read(new File(imgOriginalPath));
int type = originalImage.getType() == 0? BufferedImage.TYPE_INT_ARGB : originalImage.getType();
System.out.println("originFile Height : " + originalImage.getHeight());
System.out.println("originFile Width : " + originalImage.getWidth());
BufferedImage resizeImagePng = resizeImage(originalImage, type);
ImageIO.write(resizeImagePng, "png", originFile);
BufferedImage resigeImage = ImageIO.read(originFile);
System.out.println("===========================================================");
File resizeFile = new File(imgOriginalPath);
System.out.println("resizeFile Length : " + resizeFile.length());
System.out.println("resizeFile Height : " + resigeImage.getHeight());
System.out.println("resizeFile Width : " + resigeImage.getWidth());
} catch (Exception e){
e.printStackTrace();
}
}
private static BufferedImage resizeImage(BufferedImage originalImage, int type){
BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);
g.dispose();
return resizedImage;
}
}
샘플코드2
package test11;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class TEST2 {
public static void main(String[] args) {
String imgOriginalPath= "C:\\Users\\z\\Desktop\\imagetest\\TEST\\1.jpg"; // 원본 이미지 파일명
String imgTargetPath= "C:\\Users\\z\\Desktop\\imagetest\\TEST\\2.jpg"; // 새 이미지 파일명
String imgFormat = "png";
int newWidth = 600;
int newHeight = 600;
Image image;
int imageWidth;
int imageHeight;
try{
// 원본 이미지 가져오기
image = ImageIO.read(new File(imgOriginalPath));
// 원본 이미지 사이즈 가져오기
imageWidth = image.getWidth(null);
imageHeight = image.getHeight(null);
System.out.println("imageWidth : " + imageWidth);
System.out.println("imageHeight : " + imageHeight);
// 이미지 리사이즈
// Image.SCALE_DEFAULT : 기본 이미지 스케일링 알고리즘 사용
// Image.SCALE_FAST : 이미지 부드러움보다 속도 우선
// Image.SCALE_REPLICATE : ReplicateScaleFilter 클래스로 구체화 된 이미지 크기 조절 알고리즘
// Image.SCALE_SMOOTH : 속도보다 이미지 부드러움을 우선
// Image.SCALE_AREA_AVERAGING : 평균 알고리즘 사용
Image resizeImage = image.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH);
System.out.println("reimageWidth : " + resizeImage.getWidth(null));
System.out.println("reimageHeight : " + resizeImage.getHeight(null));
// 새 이미지 저장하기
BufferedImage newImage = new BufferedImage(newWidth, newHeight, 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();
}
}
}
출처: https://ktko.tistory.com/entry/자바-이미지-리사이즈 [KTKO 개발 블로그와 여행 일기]
반응형
'개발 > java & jsp' 카테고리의 다른 글
[java/spring] 이클립스 validating 체크해제[펌] (0) | 2020.08.22 |
---|---|
[JavaFX] Canvas 그래픽 그리기 [펌] (0) | 2020.08.16 |
[java] Firebase, Android 연동 및 push 알림보내기 [펌] (0) | 2020.08.13 |
[java/spring] 파일확장자를 필터링 하는 클래스 - FileExtFilter [펌] (0) | 2020.08.13 |
[java] 파일에서 확장자만, 파일명만 구하기? [펌] (0) | 2020.08.13 |
Comments