반응형
안녕하세요.
안드로이드 스튜디오 이용하거나, 서버 이동시 용량문제로 인해 이미지 파일을 못보내는 경우가 많은데요~
이때 필요한 내 갤러이의 고용량 사진을 저용량으로 변환하여 매체나, 서버에 보내는 함수를 알려드릴게요~
공부를하면서 조금씩 저에게 맞게 수정한 함수이니 보시고 잘 가져다 사용해보세요~
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 일거에요~
반응형
'IT기술(코딩) > 안드로이드스튜디오' 카테고리의 다른 글
adb이용해서 안드로이드 앱에 한글 입력하기 (1) | 2023.11.28 |
---|---|
코틀린stomp parsemessage 분석하기. websocket에서 stomp으로 데이터 알맞게 전송하기 nodejs (0) | 2023.06.06 |
안드로이드 스튜디오 핀치 완벽 함수! 그냥 복붙해서 인자만 넣고 갖다써요. 이미지가 크면 화면크기에 맞춰져서 나옵니다. 이미지 확대 축소 기능 핀지 자바버전 슬라이드 무시, 스크롤 무시.. (0) | 2022.01.13 |
안드로이드 스튜디오 앱에서 다른 앱 열기 안열릴때, 앱 있는데 안열릴때2 해결방법 찾음 (0) | 2021.12.06 |
안드로이드 스튜디오 앱에서 다른 앱 열기 안열릴때, 앱 있는데 안열릴때 (0) | 2021.12.06 |