Я пытаюсь сжать изображения, выбранные пользователем из галереи для загрузки. Я видел, что мои снимки камеры составляют более 5 МБ, и я хотел бы сжать их (как можно раньше, например, facebook). То, что я пытался:Сжатие изображения перед загрузкой Bitmap.CompressFormat
я позволить пользователю выбрать фотографию из галереи, получить Ури и использовать это:
File file = new File(getRealPathFromURI(getActivity(), selectedImageUri));
long length = file.length();
Log.e("Filesize:", "Before: " + length);
if (file.getName().toLowerCase().endsWith("jpg")||file.getName().toLowerCase().endsWith("jpeg")){
Bitmap original;
try {
original = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), selectedImageUri);
length = sizeOf(original);
Log.e("Filesize:", "BeforeCompression: " + length);
ByteArrayOutputStream out = new ByteArrayOutputStream();
original.compress(Bitmap.CompressFormat.JPEG, 50, out);
Bitmap decoded = BitmapFactory.decodeStream(new ByteArrayInputStream(out.toByteArray()));
length = sizeOf(decoded);
Log.e("Filesize:", "AfterCompression: " + length);
} catch (IOException e) {
e.printStackTrace();
Log.e("Filesize:", "Error: " + e);
}
Я сделал это, чтобы проверить, если он работал первый, но то, что я получаю в консоли:
/name.company.newapp E/Filesize:: Before: 4970874
/name.company.newapp E/Filesize:: BeforeConversion: 63489024
/name.company.newapp E/Filesize:: AfterConversion: 63489024
Размер не меняется вообще. Правильно ли это?
Благодарим вас за ответ. Я понимаю это сейчас. Я думал, что это не работает, но ваш ответ имеет смысл. Могу ли я загрузить его без сохранения в память? –
Ну. Сначала вам нужно загрузить его в память для выполнения сжатия. Затем вы можете напрямую сжать его в файл. Затем вы можете обратиться к файлу. Надеюсь, вы поняли, что я имею в виду. –
Не совсем, у меня не было опыта работы с растровыми изображениями, но я попробую. Спасибо. –