Форум программистов, компьютерный форум CyberForum.ru

Преобразование картинки в base64 - Android

Восстановить пароль Регистрация
 
Johnny13
1 / 1 / 1
Регистрация: 18.10.2011
Сообщений: 21
01.11.2016, 17:40     Преобразование картинки в base64 #1
Всем привет, помогите пожалуйста понять, что не так, помочь поправить код.
Суть задачи преобразовать картинки в base64 и передать на сервер.

Делаю так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public String encodeImage(String imgPath) {
        String imgString = null;
        File imageFile = new File(imgPath);
 
        Bitmap bm = decodeFile(imageFile);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] imgByte = baos.toByteArray();
 
        imgString = Base64.encodeToString(imgByte, Base64.DEFAULT);
        imgByte = null;
        baos = null;
        bm.recycle();
        bm = null;
        return imgString;
    }
 
    // Decodes image and scales it to reduce memory consumption
private Bitmap decodeFile(File f) {
        try {
            // Decode image size
            BitmapFactory.Options o = new BitmapFactory.Options();
            o.inJustDecodeBounds = true;
            BitmapFactory.decodeStream(new FileInputStream(f), null, o);
 
            // The new size we want to scale to
            final int REQUIRED_SIZE = 70;
 
            // Find the correct scale value. It should be the power of 2.
            int scale = 1;
            while (o.outWidth / scale / 2 >= REQUIRED_SIZE &&
                    o.outHeight / scale / 2 >= REQUIRED_SIZE) {
                scale *= 2;
            }
 
            // Decode with inSampleSize
            BitmapFactory.Options o2 = new BitmapFactory.Options();
            o2.inSampleSize = scale;
            return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
        } catch (FileNotFoundException e) {
        }
        return null;
    }
но получаю от сервера "Illegal base64 character a"
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2016, 17:40     Преобразование картинки в base64
Посмотрите здесь:

Android Преобразование имени контакта в строку
Android Преобразование R.string.* в строку
Android Преобразование StringBuffer в String
Преобразование картинки в текст для SQL запроса Android
Android Преобразование EditText в Double
Android Преобразование числа
Преобразование 2 форматов дат к одному Android
Android Преобразование string в double

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vindigo
18 / 18 / 3
Регистрация: 15.05.2014
Сообщений: 77
01.11.2016, 19:57     Преобразование картинки в base64 #2
Попробуйте в 10 строке вместо Base64.DEFAULT использовать Base64.NO_WRAP
Johnny13
1 / 1 / 1
Регистрация: 18.10.2011
Сообщений: 21
01.11.2016, 22:50  [ТС]     Преобразование картинки в base64 #3
попробовал, вот ответ
JSON
1
{"error":{"description":"java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 12 path $.driver"}}
Добавлено через 49 минут
дебагом удалось выяснить, что эта строка
Java
1
imgString = Base64.encodeToString(imgByte, Base64.DEFAULT);
возвращает строку вида - /9j/4AAQSkZJRgABAQAAAAAAAAD/4QCMRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAA...
а после прохождения через
Java
1
jsonBody = new JSONObject("{"driver":" + gson.toJson(driver) + "}");
превращается в подобную - \/9j\/4AAQSkZJRgABAQAAAQABAAD\/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB...
Судя по всему сервак из-за этого и посылает меня... но почему так происходит?
vindigo
18 / 18 / 3
Регистрация: 15.05.2014
Сообщений: 77
03.11.2016, 19:58     Преобразование картинки в base64 #4
да не, то что добавляются бекслеши, это экранирование слешей в строке
а вот посылает он вас, исходя из ошибки, потому что ждет объект, а вы ему строку отдаете...
уже полчаса над вашим вопросом гуглю и не могу понять где собака зарыта

Добавлено через 16 минут
как вообще формируете driver?
и что означает вот это - "{"driver":" + gson.toJson(driver) + "}"? Если формируете строку то где +?
petruchodd
 Аватар для petruchodd
88 / 88 / 8
Регистрация: 23.06.2009
Сообщений: 501
07.11.2016, 11:31     Преобразование картинки в base64 #5
Java
1
2
3
4
5
6
7
8
9
10
public static String encodeBase64(Bitmap bitmap){
        String result = null;
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
        byte[] byteArray = byteArrayOutputStream .toByteArray();
        result  = Base64.encodeToString(byteArray, Base64.DEFAULT);
        result = result.replace(" ", "");
        result.trim();
        return result;
    }
на попробовать.

не делай так джсон - делай по проще , а то запутаешься с скобками .
jsonBody.put("name", "base64");
ошибка говорит что должно быть { , но получили STRING . Вообщем ошибка у тебя в том , что напутано где-то с {}
Yandex
Объявления
07.11.2016, 11:31     Преобразование картинки в base64
Ответ Создать тему
Опции темы

Текущее время: 21:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru