2014-04-18 6 views
5

Android로 포팅중인 iOS 앱에 사진 업로드 이미지 위젯이 있습니다. 데이터는 다중 파트/양식 데이터 형식의 HTTP POST로 전송됩니다. 안드로이드에서 이것을 복제해야하지만 몇 가지 문제가 있습니다.Android가 UIImageJPEGRepresentation에 해당합니까?

기존 아이폰 OS 코드 : 안드로이드에

if ([[dictionary objectForKey:key] isKindOfClass:[UIImage class]]) { 
         NSData *imageJPEG = UIImageJPEGRepresentation([dictionary objectForKey:key], 1); 
         NSString *filename = [NSString stringWithFormat:@"%@.jpg", key]; 
         [(ASIFormDataRequest *)request setData:imageJPEG withFileName:filename andContentType:@"image/jpeg" forKey:key]; 
        } 

내가 노력하고있어 :

Bitmap fullImage = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImageUri); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
fullImage.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
byte[] b = baos.toByteArray(); 
String encodedImage = Base64.encodeToString(b, Base64.DEFAULT); 

결과 문자열은 그러나 두 플랫폼 모두에서 동일한 이미지의 다른는, 결과는 안드로이드 있다는 것을 이미지가 업로드 된 후 서버 측에서 렌더링되지 않습니다.

이미지를 jpeg 인코딩 이미지가 포함 된 바이트 배열로 변환하기위한 Android/Java UIImageJPEG에 대한 설명은 무엇입니까?

+1

JPEG 표현이 재현 될 것으로 기대하지 마십시오. 동일한 압축률을 사용하더라도 상당히 가변적입니다. 다른 차이점은 iOS 케이스에서는 데이터를 원시 바이트로 보내지 만 Android 케이스에서는 Base 64로 인코딩 된 데이터를 보내는 것입니다. Android에서 Content-Encoding 헤더를 적절하게 설정하고 있습니까? –

+0

Content-Type : image/jpeg 헤더를 보내고 있지만 현재 Content-Transfer-Encoding을 설정하지 않았습니다. 업로드중인 웹 서비스를 실행중인 팀이 이미지 문자열을 받고 최종적으로 데이터베이스에 저장하고 있음을 확인했습니다. – Shane

+1

하지만 인코딩 유형을 설정하지 않으면 아마 base-64를 유효한 jpg 이미지로 다시 디코딩하지 않을 것입니다. –

답변

3

Content-Encoding HTTP 헤더를 base64로 설정하여 서버가베이스 64를 올바른 jpg로 올바르게 디코딩 할 수 있는지 확인하십시오.

+0

"Content-Transfer-Encoding : base64"와 "Content-Encoding : base64"둘 다 시도했지만 어느 것도 작동하지 않았습니다. JPEG 파일이 성공적으로 업로드되었지만 형식이 인식되지 않습니다. 'request'는'OutputStreamWriter' 타입 인'request.append (encodedImage);에 의해 @Shane의'encodedImage'를 추가하고 있습니다. 어떤 제안이라도 감사하겠습니다. – rockhammer

관련 문제