안녕하세요.
사용자가 앨범에서 선택한 사진을 상대에게 전송할때, 서버에 업로드를 먼저해야하는데요.
서버에 업로드할 이미지가 만약 기본적으로 회전된 이미지인경우, 0도로 세팅해서 실제 이상이 없게 보이도록 업로드를 해야하는데요.
현재 제가 작성한 방식은 아래와 같습니다.
case CAMERA_REQUEST_TYPE_PHOTO_GALLERY :
List<Uri> uriList = data.getParcelableArrayListExtra("uris");
for (int i = 0; i < uriList.size(); i++) {
f = new File(uriList.get(i).toString().replaceAll("^file\\:\\/\\/", ""));
OutputStream out = null;
try {
Uri uri = uriList.get(i);
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);
ExifInterface exif1 = new ExifInterface(f.getAbsolutePath());
int exifOrientation1 = exif1.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED);
Bitmap rotatedBitmap = rotateBitmap(bitmap, exifOrientation1);
out = new FileOutputStream(f);
rotatedBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
}catch (Exception e){
Log.e("activity err", e.toString());
}finally {
try {
out.close();
out.flush();
}catch (Exception e){
Log.e("Dsffsd", e.toString());
}
}
if (f.exists()) {
msgSendgBt("0014", "0001", MyMap.of("basYn", basYn, "path", f.getParent(), "orgFile", f.getName(), "thumbFile", f.getName(), "msgImgWidth", msgImgWidth, "msgImgHeight", msgImgHeight));
}
Uri 파일 위치값을 리턴해주는 앨범함수(라이브러리, (file:// path로 넘어옴)에서 해당 값을 file객체로 만들고
이제 넘어온 파일경로를 바탕으로 비트맵으로 변환 후, 회전값을 구하고 회전값에 따라, 값이 있다면 회전하도록(rotateBitmap함수)수행한 뒤, 해당 비트맵을 다시 파일로 만들고 기존 파일경로에 덮어쓰기
이런 방식으로 작성했거든요.
그런데, 비트맵도 만들고 하다보니 메모리도 잡아먹고 속도도 느리게 되어서 문제입니다 ㅠ
혹시 좋은 방법이 있을 까요? 서버에는 회전된 이미지를 올려야 상대가 받을때 올바르게 회전된 이미지를 다운받기 때문에, 이방식으로 생각하긴했는데요.
괜찮은 방법있으시면 조언 부탁드립니다 (__)