2014-04-18 7 views
5

मेरे पास एक आईओएस ऐप में एक फोटो अपलोड छवि विजेट है जिसे मैं एंड्रॉइड पर पोर्ट कर रहा हूं। मल्टीपार्ट/फॉर्म-डेटा प्रारूप में डेटा को HTTP पोस्ट के रूप में भेजा जाता है। मुझे एंड्रॉइड में इसे दोहराने की जरूरत है लेकिन मुझे कुछ समस्याएं हैं।एंड्रॉइड समतुल्य UIImageJPEGRepresentation के बराबर है?

मौजूदा आईओएस कोड स्निपेट:

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); 

जिसके परिणामस्वरूप स्ट्रिंग लेकिन दोनों प्लेटफार्मों पर एक ही छवि के लिए अलग है, परिणाम जा रहा है कि एंड्रॉयड अपलोड होने के बाद सर्वर सर्वर पर प्रतिपादन नहीं कर रहा है।

एक छवि को एक बाइट सरणी में जेपीईजी-एन्कोडेड छवि वाले कनवर्ट करने के लिए UIImageJPEGReresentation के लिए एंड्रॉइड/जावा समतुल्य क्या है?

+1

जेपीईजी प्रस्तुतियों को पुनरुत्पादित करने की अपेक्षा न करें, समान संपीड़न दर के साथ भी काफी भिन्नता है। मुझे लगता है कि दूसरा अंतर यह है कि आप आईओएस मामले में कच्चे बाइट्स के रूप में डेटा भेज रहे हैं, लेकिन इसे एंड्रॉइड केस में एन्कोडेड बेस 64 भेज रहे हैं। क्या आप एंड्रॉइड पर सामग्री-एन्कोडिंग हेडर उचित रूप से सेट कर रहे हैं? –

+0

मैं एक सामग्री-प्रकार भेज रहा हूं: छवि/जेपीईजी हेडर, लेकिन मैं वर्तमान में सामग्री-स्थानांतरण-एन्कोडिंग सेट नहीं कर रहा हूं। जिस वेब-सेवा को हम अपलोड कर रहे हैं, उसे चलाने वाली टीम ने पुष्टि की है कि वे छवि स्ट्रिंग प्राप्त कर रहे हैं और इसे अपने अंत में डेटाबेस में संग्रहीत कर रहे हैं। – Shane

+1

लेकिन एन्कोडिंग प्रकार सेट किए बिना, वे शायद बेस -64 को वैध जेपीजी छवि में डीकोड नहीं कर रहे हैं। –

उत्तर

3

सुनिश्चित करें कि आप सामग्री-एन्कोडिंग HTTP शीर्षलेख को बेस 64 पर सेट कर रहे हैं, इसलिए सर्वर बेस 64 को वैध जेपीजी में ठीक से डीकोड करने के बारे में जानता है।

+0

मैंने "कंटेंट-ट्रांसफर-एन्कोडिंग: बेस 64" और "कंटेंट-एन्कोडिंग: बेस 64" दोनों की कोशिश की है लेकिन न तो काम किया है। जेपीईजी फ़ाइल सफलतापूर्वक अपलोड होती है लेकिन प्रारूप पहचाना नहीं जाता है। मैं 'request.append (encodedImage) द्वारा @Shane की' एन्कोडेड छवि 'को जोड़ रहा हूं;' जहां 'अनुरोध' प्रकार 'आउटपुटस्ट्रीमवाइटर' है। किसी भी सुझाव की सराहना की जाएगी – rockhammer

संबंधित मुद्दे