есть способ, которым я могу сжать изображение 115kb, чтобы быть 4kb в android Без ущерба для его размера?. просто уменьшая его качество?Как уменьшить качество растрового изображения без ущерба для его размера
я знаю только с помощью
BitmapFactory.Options, что снижает как размер и качество
Bitmap.compress, который не дает вам возможности для определения размера в байтах.
общественного Bitmap compressImage (String ImagePath) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
bmp = BitmapFactory.decodeStream(new FileInputStream(imagePath),null, options);
options.inSampleSize = calculateInSampleSize(options, actualWidth, actualHeight);
options.inJustDecodeBounds = false;
bmp = BitmapFactory.decodeStream(new FileInputStream(imagePath),null, options);
return bmp;
}
public int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
final int heightRatio = Math.round((float) height/(float) reqHeight);
final int widthRatio = Math.round((float) width/(float) reqWidth);
inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
}
final float totalPixels = width * height;
final float totalReqPixelsCap = reqWidth * reqHeight * 2;
while (totalPixels/(inSampleSize * inSampleSize) > totalReqPixelsCap) {
inSampleSize++;
}
return inSampleSize;
}
Почему вам это нужно? избежать OOME? это не поможет! ... не имеет значения, имеет ли файл, из которого декодирован битмап, 4 КБ или 1 МБ ... ** объект Bitmap будет брать тот же объем памяти, что зависит только от ширины и высоты растрового изображения и формата пикселей ** – Selvin
@Selvin i не нужно, чтобы избежать OOME. на самом деле я пытаюсь реализовать приложение для обмена изображениями, например whatsapp, где пользователь увидит, как выглядит изображение перед загрузкой. поэтому я думаю о том, чтобы отправить изображение с такими же размерами, как оригинальное, но низкое качество для пользователя через googles GCM, который ограничивает загрузку данных до 4kb :( –
нет другого способа попробовать bitmap.compress (Bitmap.CompressFormat.JPG, q) 'с разным значением' q' ... но вы можете попытаться разбить файл на 4kb pices ... или использовать API-драйв Google (или любое другое хранилище) и отправить только ссылку – Selvin