Android相当于UIImageJPEGRepresentation的方法是什么?

6
我正在将一个iOS应用中的照片上传图像小部件移植到Android,并以multipart/form-data格式将数据作为HTTP POST发送。我需要在Android中复制这个功能,但遇到了一些问题。
现有的iOS代码片段:
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);

相同的图像在两个平台上生成的字符串不同,结果是上传后服务器端无法呈现Android图像。
在Android / Java中,将图像转换为包含jpeg编码图像的字节数组的UIImageJPEGRepresentation等价物是什么?

1
不要期望JPEG表示是可再现的,即使压缩率相同,也存在相当大的变异性。我注意到的另一个区别是,在iOS情况下,您将数据作为原始字节发送,但在Android情况下,您将其作为Base 64编码发送。您是否在Android上适当设置了Content-Encoding标头? - David Berry
我正在发送一个 Content-Type: image/jpeg 的头部信息,但是我目前没有设置 Content-Transfer-Encoding。我们上传到的 Web 服务团队已经确认他们正在接收图像字符串并将其存储在他们的数据库中。 - Sodman
1
但是如果没有设置编码类型,它们可能无法将base-64解码为有效的jpg图像。 - David Berry
你说得对,谢谢! - Sodman
@Shane,我不理解为什么你会在Android上使用base64对图像进行编码,但在iOS上却没有,因为在我看来,UIImageJPEGREpresentation并不返回base64编码的值? - Klaus
我也想用MultipartEntityBuilder完成同样的事情,但卡在这里了。在设置encodedImage字符串后,如何将其作为multipartEntityBuilder.addPart(String xxx,ContentBody body)添加到httpPost中?我只会上传文件,但是服务器上看不到任何图像... - Antoine Murion
1个回答

3

请确保将Content-Encoding HTTP标头设置为base64,以便服务器知道如何正确地将base64解码为有效的jpg。


我已尝试了 "Content-Transfer-Encoding: base64" 和 "Content-Encoding: base64" 但都没有起作用。JPEG 文件成功上传,但格式无法识别。我正在通过 request.append(encodedImage); 将 @Shane 的 encodedImage 添加到类型为 OutputStreamWriterrequest 中。欢迎提供建议。 - rockhammer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接