티스토리 뷰
오늘은 프로젝트를 진행하다가 이미지 사이즈를 줄여야할 경우가 생겨서 여러 사이트를 찾아보면서 만들었던
ImageUtil에 대해서 정리하려고 합니다. 저도 다음에 다시 필요성을 느꼈을때 참조하기 위해서 포스팅하려고 합니다.
두 가지의 ImageUtil을 포스팅하고 필요할 때 커스터마이징해서 상황에 맞게 응용하시면 될 것 같습니다.
case 1)
public class ImageUtil { private static final int IMG_WIDTH = 600; // 이미지 width 상황에 맞게 설정 private static final int IMG_HEIGHT = 700; // 이미지 height 상황에 맞게 설정 /** * 원본 이미지를 리사이즈 한다. * * @param String srcPath 원본 이미지 경로 * @param String destPath 대상 경로 * @param String fileName 파일명 * @param String suffix 확장자 ( .jpg , .png ) * @throws IOException */ public static void imageResize(String srcPath, String destPath, String fileName, String suffix) throws IOException { File destFolder = new File(destPath); if (!destFolder.exists()) { destFolder.mkdirs(); } // File file = new File(srcPath + fileName + suffix); BufferedImage originalImage = ImageIO.read(new File(srcPath + fileName + "." + suffix)); String convertUUID = UUID.randomUUID().toString().replace("-", ""); // 해쉬명 생성 int type = originalImage.getType() == 0 ? BufferedImage.TYPE_INT_ARGB : originalImage.getType(); BufferedImage resizeImage = resizeImageWithHint(originalImage, type); ImageIO.write(resizeImage, suffix.substring(1), new File(destPath + convertUUID + suffix)); } /** * 이미지를 리사이즈 한다. * * @param File srcFile 원본 이미지 파일 * @param String destPath 대상 경로 * @param String hashfileName 해쉬파일명 * @param String suffix 확장자 ( .jpg , .png ) * @throws IOException */ public static void imageResize(File srcFile, String destPath, String hashfileName, String suffix) throws IOException { File destFolder = new File(destPath); if (!destFolder.exists()) { destFolder.mkdirs(); } BufferedImage originalImage = ImageIO.read(srcFile); int type = originalImage.getType() == 0 ? BufferedImage.TYPE_INT_ARGB : originalImage.getType(); BufferedImage resizeImage = resizeImageWithHint(originalImage, type); ImageIO.write(resizeImage, suffix.substring(1), new File(destPath + hashfileName + suffix)); } private static BufferedImage resizeImageWithHint(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(); g.setComposite(AlphaComposite.Src); g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); return resizedImage; } }
case 2)
public class ImageUtil { /** * 이미지를 리사이즈 한다. * * @param String imgsrc 원본 이미지 경로 * @param String imgdist 대상 경로 * @param String type 확장자 ( .jpg , .png ) * @param String fileName 파일명 * @param int widthdist 리사이즈할 가로사이즈 * @param int heightdist 리사이즈할 세로사이즈 * @throws IOException */ public static void reduceImg(String imgsrc, String imgdist, String type, String fileName, int widthdist, int heightdist) throws IOException { File srcfile = new File(imgsrc + fileName + type); File destFolder = new File(imgdist); String convertUUID = UUID.randomUUID().toString().replace("-", ""); // 해쉬명 생성 if (!destFolder.exists()) { destFolder.mkdirs(); } Image src = ImageIO.read(srcfile); BufferedImage resizeImage = new BufferedImage((int) widthdist, (int) heightdist, BufferedImage.TYPE_INT_RGB); resizeImage.getGraphics() .drawImage(src.getScaledInstance(widthdist, heightdist, Image.SCALE_SMOOTH), 0, 0, null); // resizeImage.getGraphics().drawImage(src.getScaledInstance(widthdist, heightdist, // Image.SCALE_AREA_AVERAGING), 0, 0, null); FileOutputStream out = new FileOutputStream(imgdist + convertUUID + type); ImageIO.write(resizeImage, type.substring(1), out); out.close(); } /** * 이미지를 리사이즈 한다. * * @param File srcFile 업로드된 원본 파일 * @param String destPath 새로 저장할 파일 경로 * @param String type 확장자 ( .jpg , .png 등 ) * @param String hashfileName 해쉬파일 * @param int widthdist 리사이즈할 가로사이즈 * @param int heightdist 리사이즈할 세로사이즈 * @throws IOException */ public static void resizeImg(File srcFile, String destPath, String type, String hashfileName, int widthdist, int heightdist) throws IOException { File destFolder = new File(destPath); if (!destFolder.exists()) { // 폴더 없으면 생성 destFolder.mkdirs(); } Image src = ImageIO.read(srcFile); BufferedImage resizeImage = new BufferedImage((int) widthdist, (int) heightdist, BufferedImage.TYPE_INT_RGB); resizeImage.getGraphics() .drawImage(src.getScaledInstance(widthdist, heightdist, Image.SCALE_SMOOTH), 0, 0, null); // resizeImage.getGraphics().drawImage(src.getScaledInstance(widthdist, heightdist, // Image.SCALE_AREA_AVERAGING), 0, 0, null); FileOutputStream out = new FileOutputStream(destPath + hashfileName + type); ImageIO.write(resizeImage, type.substring(1), out); out.close(); } }
그리고 마지막으로 MultipartFile을 File로 변환하는 method는 다음과 같다.
/** * multipartFile을 File로 변환한다. * * @param MultipartFile file 멀티파트 파일 * @return File 변환된 파일을 반환한다. * @throws IOException */ public static File multipartFileToFile(MultipartFile file) throws IOException { File convFile = new File(file.getOriginalFilename()); convFile.createNewFile(); FileOutputStream fos = new FileOutputStream(convFile); fos.write(file.getBytes()); fos.close(); return convFile; }
이것으로, 이미지를 받으면, 해당 이미지의 사이즈를 늘리거나 줄이는 util에 대해서 포스팅했습니다.
다음에 기회가 된다면 이미지 해상도를 낮추거나 높이는 util에 대해서 포스팅할 수 있도록 찾아보겠습니다.
아직, 많이 부족해서 더 좋은 방법이 있으면 그 방법으로 하시는걸 추천드립니다. :)
이것으로 오늘의 포스팅은 마치도록 하겠습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday