2014-12-04 4 views
0

Android 갤러리 앱을 사용하여 나중에 httppost로 업로드 할 사진을 선택합니다. 사진은 업로드되지만 매우 낮은 품질과 크기의 입니다. 나는 Bitmap.CompressFormat.PNG을 무손실로 만들 것입니다. 사진은 2000x1500에서 250x187으로 찍습니다.갤러리 앱에서 이미지 업로드 (품질 문제)

실제 이미지가 아닌 미리보기 이미지가 표시 될 수 있습니까? Google의 사진을 사용하고 있습니다.

코드

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (resultCode == getActivity().RESULT_OK) { 
     selectedImage = Uri.parse(data.getDataString()); 

     try { 
      final Bitmap v = DecodeUriImage.Decode(selectedImage, getActivity()); 
      ByteArrayOutputStream bao = new ByteArrayOutputStream(); 
      v.compress(Bitmap.CompressFormat.PNG, 100, bao); 
      byte[] byte_arr = bao.toByteArray(); 

      // Add image to array 
      images.set(selectedImageIndex, Base64.encodeToString(byte_arr, Base64.DEFAULT)); 

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

결과

Image

답변

1

Bitmap.CompressFormat.PNG는 이미지를 압축하지만 그것은 당신이 비에 사용한 형식의 어떤 꼬임에 따라 달라집니다 압축 된 이미지. 최상의 결과를 얻으려면 벡터 이미지를 사용해야합니다. 왜냐하면 "압축 전송"에서 이미지가 커지지 않으면 이미지 품질이 떨어지기 때문입니다.

0

나중에 사용할 수 있도록 선택한 이미지를 비트 맵에 넣을 이유가 없습니다. 또한 DecodeUriImage.Decode(selectedImage, getActivity());에 모두 무슨 일이 일어나는지 보여주지 않았습니다. 어쩌면 품질이 변경되었을 수도 있습니다. 대신 selectedImage에 미디어 경로가 있음을 깨닫고 파일 시스템의 실제 경로로 변환 할 수 있습니다. 나중에 사용할 수 있도록 해당 경로를 저장하십시오.

나중에 파일을 바이트 배열로로드하고 base64로 인코딩하는 것보다 나중에 사용하는 경우. Bitmapfactory를 사용하지 마십시오.