Я пытался сохранить изображения в базе данных SQLite, но даже я сжимаю и масштабирую растровое изображение, файл все еще слишком велик, особенно когда вы снимаете изображение с камеры телефона.Возможно ли зашифровать bytearray/bitmap до определенного размера?
Есть ли какой-либо способ застегнуть bytearray/bitmap в определенный размер, например, от 4 мб до 500 кб? Если да, как я могу это сделать?
private void uriToFile(Uri uri, File sdImageMainDirectory) throws IOException {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
OutputStream stream = new FileOutputStream(sdImageMainDirectory);
int bitmapWidth = bitmap.getWidth();
int bitmapHeight = bitmap.getHeight();
int maxSize = 10;
float bitmapRatio = (float) bitmapWidth/(float) bitmapHeight;
if(bitmapRatio > 0){
bitmapWidth = maxSize;
bitmapHeight = (int) (bitmapWidth/bitmapRatio);
}
else{
bitmapHeight = maxSize;
bitmapWidth = (int) (bitmapHeight * bitmapRatio);
}
bitmap.createScaledBitmap(bitmap, bitmapWidth, bitmapHeight, true);
bitmap.compress(Bitmap.CompressFormat.JPEG, 30, stream);
stream.flush();
stream.close();
}
Итак, вы хотите, чтобы уменьшить размер 1/8? Кажется немного экстремальным, нет? Вы можете изменить размер изображения, но сжатие не является волшебным. – 323go
Мне просто нужно, чтобы фотография могла храниться в одной строке из базы данных, так как каждая строка может только помещаться в 2 МБ, но я уже изменил размер и сжимаю растровое изображение, которое оно еще на 2 МБ. –
Тогда сделайте его меньше. Еще раз, zip не волшебство. И большинство форматов изображений уже сжаты, что делает их очень слабыми кандидатами для дальнейшего сжатия. Как правило, плохая идея хранить большие двоичные данные в базе данных. Подумайте, как сохранить их в виде файлов в частной папке и сохранить ссылку в своей базе данных. – 323go