получить высококачественную картинку из строки base64

Я возвращаю изображение как base64 string на стороне сервера. В клиентском приложении принимает эту строку base64 и преобразовать ее в byte[] а затем Bitmap и на последнем шаге устанавливает этот растр ImageView, Моя проблема качество возвращаемого изображения. Выглядит плохо; Я могу видеть пиксели этого изображения …

Загрузить часть

Клиентская сторона (загрузка):

BitmapFactory.Options options = null;
options = new BitmapFactory.Options();
options.inSampleSize = 3;
bitmap = BitmapFactory.decodeFile(imgPath, options);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
// Must compress the Image to reduce image size to make upload easy
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] byte_arr = stream.toByteArray();
// Encode Image to String
encodedString = Base64.encodeToString(byte_arr, 0);

Сторона сервера (принимает загруженное изображение):

$_image = $_REQUEST['image'];
$binary = base64_decode($_image);
// for inserting it to db...
$sql = "INSERT INTO users (`_profile_pic`) VALUES ('$_image')";
$connect->query($sql);

Принять часть

Сторона сервера (получает строку base64 из базы данных)

$user_data = "SELECT _name, _profile_pic FROM users WHERE _id = {$_id}";
$data = $connect->query($user_data);
while ($row = $data->fetch(\PDO::FETCH_ASSOC))
$collectedResult[] = $row;
echo json_encode($collectedResult, JSON_UNESCAPED_UNICODE);

Клиентская часть (устанавливает изображение в ImageView (проблемная часть))

_picture = (ImageView) findViewById(R.id.profile_imageView);
byte[] decodedString = Base64.decode(profile_pic_value, Base64.DEFAULT);
Bitmap bmp = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
_picture.setImageBitmap(bmp);

На данный момент я не знаю, как восстановить или повысить качество.

Любой полезный комментарий, ответ приветствуется.

С Уважением,
Мирджалал.

P.S. Этот вопрос может быть дубликатом другого вопроса (ов), но я не смог найти дубликат. : D
я нашел этот но я не знаю, как использовать.

1

Решение

Возможно, вы теряете глубину цвета при декодировании в ОЗУ. У Android есть настройки по умолчанию, в какой цветовой формат он декодирует растровые изображения. Смотрите следующий пример, который экономит ОЗУ, но сохраняет приемлемое качество изображения.

public static Bitmap decodeBase64(String input) {
byte[] decodedByte = Base64.decode(input, Base64.DEFAULT);
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = false;
options.inPreferredConfig = Bitmap.Config.RGB_565;
return BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length, options);
}

Присмотритесь Bitmap.Config.RGB_565 параметр.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector