마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

회전된 이미지를 서버에 저장시켜야할 때

0 추천

안녕하세요.

사용자가 앨범에서 선택한 사진을 상대에게 전송할때, 서버에 업로드를 먼저해야하는데요.

서버에 업로드할 이미지가 만약 기본적으로 회전된 이미지인경우, 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함수)수행한 뒤, 해당 비트맵을 다시 파일로 만들고 기존 파일경로에 덮어쓰기

이런 방식으로 작성했거든요.

 

그런데, 비트맵도 만들고 하다보니 메모리도 잡아먹고 속도도 느리게 되어서 문제입니다 ㅠ

혹시 좋은 방법이 있을 까요? 서버에는 회전된 이미지를 올려야 상대가 받을때 올바르게  회전된 이미지를 다운받기 때문에, 이방식으로 생각하긴했는데요.

 

괜찮은 방법있으시면 조언 부탁드립니다 (__)

겸군님 (1,900 포인트) 님이 2019년 8월 5일 질문
안드로이드에서 변환하는게 부담이면,
 서버로 이미지 올리면서 회전정보를 같이 올리고,
 서버에서 회전한 데이터를 저장하는 방식으로 구현하시는게 좋을 듯 합니다.

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...