在不创建文件的情况下将JPG图像压缩到RequestBody中

时间:2017-12-08 10:26:51

标签: android okhttp3 okhttp

我想将JPG文件发送到我的服务器,其大小限制固定为500KB。永远不要将此文件写入手机存储空间(包含机密数据)。

我的输入是从相机返回的字节数组。

目前这就是我正在做的事情

ConfigFileApplicationListener

如何使用此大小限制创建ApplicationContext?我可以缩小图像质量。

1 个答案:

答案 0 :(得分:0)

这可以使用位图

来实现

我只需要使用带有ByteArrayOutputStream的Bitmap来压缩我的图片,但我找不到一种方法来获得输出中的精确尺寸。

public static byte[] compressCapture(byte[] capture, int maxSizeKB) {

    // This should be different based on the original capture size
    int compression = 12;

    Bitmap bitmap  = BitmapFactory.decodeByteArray(capture, 0, capture.length);
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.JPEG, compression, outputStream);
    return outputStream.toByteArray();
}

public Observable<User> uploadPicture(byte[] pictureBytes) {
    RequestBody pictureFormatted = RequestBody.create(MediaType.parse("image/*"), compressCapture(pictureBytes, 500));
    MultipartBody.Part.createFormData("confidentialPicture", "confidentialPicture.jpg", pictureFormatted);

    return api.uploadPicture(picturePart);
}