본문 바로가기
IT기술(코딩)/안드로이드스튜디오

java 안드로이드 스튜디오 이미지 사이즈 축소 및 이지미 용량 축소 감소 조절 함수

by 크리에이트매이커 2021. 11. 30.
반응형

안녕하세요.

안드로이드 스튜디오 이용하거나, 서버 이동시 용량문제로 인해 이미지 파일을 못보내는 경우가 많은데요~

 

이때 필요한 내 갤러이의 고용량 사진을 저용량으로 변환하여 매체나, 서버에 보내는 함수를 알려드릴게요~

공부를하면서 조금씩 저에게 맞게 수정한 함수이니 보시고 잘 가져다 사용해보세요~

 

 public static String saveBitmapToJpeg(Context context, Bitmap bitmap, String name){
        int maximagesize = 50 * 10000; // 저용량 변환중 최대 사이즈
        int realimagesize = maximagesize;
        int quality = 100; //사진퀄리티는 처음 100부터 줄여나가면서 용량을 맞춥니다.

        File storage = context.getCacheDir(); //임시파일(캐시라 적혀잇죠?)

        String fileName = name + ".jpg";  // 어짜피 임시파일이기 때문에 알맞게 적어주세요.

        File tempFile = new File(storage,fileName);

        try{
            tempFile.createNewFile();  // 파일을 생성해주고


			//아래 부분이 가장 중요한 부분이에요.
            while(realimagesize >= maximagesize) {
                if(quality < 0){
                    return "tobig";
                }
                FileOutputStream out = new FileOutputStream(tempFile);
                
                bitmap.compress(Bitmap.CompressFormat.JPEG, quality, out);
                realimagesize = (int)tempFile.length(); //작아진 본 파일의 크기를 저장하여 다시 비교합니다.
                
                quality -= 20; //이부분으 줄면서 용량이 작아닙니다.

                out.close(); // 마무리로 닫아줍니다.

            }

            Log.d(TAG,"imagelocation resizefilesize result: " + realimagesize);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return tempFile.getAbsolutePath();   //임시파일 경로로 리턴.
    }

return 에 임시파일 저장경로가 있어서, 혹시 연속하는 이미지 업로드시 arraylist 같은것을 이용하여 순서에 맞게 경로를 저장해 주세요~

임시파일 경로기 때문에 따로 경로 저장이 없으면 캐시에 덮어져 버립니다. 물론 코드를 조금 변형하면 안그럴 수 있게지만요~

 

이 함수는 서버를 통하기 전 작업을 하고 이미지 경로를 저장한 뒤에 그 경로를 통해 서버에 이미지를 전송해야 합니다.

서버 전송 함수에 이 함수를 적용하면 애초에 큰 용량이 서버 함수에 들어가는거기 때문에 작업시간이 지연되서 안좋을 수 있어요.

물론 이부부 또한 코드를 조금 변형하면 안그럴 수 있습니다 ㅎㅎ..

 

참고로 서버 통신간에 오류가 번호를 잘 보시고 검색해 보세요~ 논리 구조는 맞지만, 용량이커서 안되는 경우도 꽤 많답니다.

참고로 용량 초과 서버 끊김 오류는 413 일거에요~

 

 

반응형