Есть ли в наличии, чтобы уменьшить емкость изображения (взятого с камеры телефона).Насколько я знаю, параметры, которые можно изменить, это качество, кодировка и размер изображения.Для этого я использую zetbaitsu / Compressor lib.
Вопрос в том, как определить требуемые размеры для облачного хранилища, чтобы изображение было хорошего качества при различных размерах / разрешениях экрана Android, при этом значительно снижая требования к хранилищу.
File image = fileMessageContainer.getFile();
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
bmOptions.inJustDecodeBounds = true;
BitmapFactory.decodeFile(image.getAbsolutePath(), bmOptions);
int width = bmOptions.outWidth;
int height = bmOptions.outHeight;
Log.d("myApp", "uncompressed" + width + " height: " + height);
Bitmap bitmap = compressImages(image, width, height);
Log.d("myApp", "compressed" + bitmap.getWidth() + " height: " +
bitmap.getHeight());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] byteArray = baos.toByteArray();
Log.d("myApp", "original data " + byteArray.length);
private Bitmap compressImages(File actualImage, int width, int height){
try {
return new Compressor(context)
.setQuality(75)
.setMaxHeight(height)
.setMaxWidth(width)
.setCompressFormat(Bitmap.CompressFormat.JPEG)
.compressToBitmap(actualImage);
}catch (Exception e){
Log.d("myApp", "compressImages-Error " + e.getMessage());
}
return null;
}
private byte[] convertToByteArray(Bitmap b){
int bytes = b.getByteCount();
ByteBuffer buffer = ByteBuffer.allocate(bytes); //Create a new buffer
b.copyPixelsToBuffer(buffer); //Move the byte data to the buffer
return buffer.array(); //Get the underlying array containing the data.
}
Вывод на консоль
без сжатия ширина: 2448 высота: 3264 сжатая ширина: 2448 высота: 3264 исходные данные 31961088