public Bitmap decodeUri(Uri selectedImage) throws FileNotFoundException {
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(getContentResolver().openInputStream(selectedImage), null, o);
final int REQUIRED_SIZE = 800;
int width_tmp = o.outWidth, height_tmp = o.outHeight;
int scale = 1;
while (true) {
if (width_tmp / 2 < REQUIRED_SIZE || height_tmp / 2 < REQUIRED_SIZE) {
break;
}
width_tmp /= 2;
height_tmp /= 2;
scale *= 2;
}
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
return BitmapFactory.decodeStream(getContentResolver().openInputStream(selectedImage), null, o2);
}
Чтобы декодировать URI с камеры mi и затем отправить на мой веб-сервер через объект HttpURLConnection в заголовках POST. Но вместо этого я получаю исходное изображение:

Я получаю обрезанное изображение:

Я не знаю почему. Возможно, мой метод decodeURI неверен? Кто-нибудь знает другой лучший способ отправить сжатое изображение на мой веб-сервер?
Я использовал следующий способ вместо моего метода decodeUri:
mybitMap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImageUri);
и у меня такая же проблема. И когда я попытался открыть изображение на своем веб-сервере с помощью Photoshop, я увидел рекламу, в которой говорилось: «Этот документ может быть поврежден (файл может быть обрезан или неполным). Продолжить?» И после продолжения я вижу черное пространство внизу изображения...
Кто-нибудь знает, почему? Мой код:
Bitmap mybitMap = null;
try {
mybitMap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImageUri);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
imagen.compress(Bitmap.CompressFormat.JPEG, 100, baos);
И я отправляю это в заголовках POST:
Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT);
Подробнее здесь: https://stackoverflow.com/questions/329 ... -decodeuri
Мобильная версия