Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Johnny13
1 / 1 / 2
Регистрация: 18.10.2011
Сообщений: 50
#1

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

01.11.2016, 17:40. Просмотров 706. Ответов 4
Метки нет (Все метки)

Всем привет, помогите пожалуйста понять, что не так, помочь поправить код.
Суть задачи преобразовать картинки в 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"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2016, 17:40
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Преобразование картинки в base64 (Программирование Android):

Преобразование картинки в текст для SQL запроса
хочу иметь возможность вставлять картинки типа Bitmap в БД на сервере. если на...

Base64.encode переносит строки
Столкнулся с такой проблемой при кодировании. String clientId =...

Преобразование картинки в base64
Подскажите, пожалуйста, можно ли в Делфи 7 преобразовать картинку формата jpg в...

картинки base64
Всем бонжур :) Браузеры кодируют картинки в base64. Каким алгоритмом они...

Преобразование base64 в байты
Добрый день, товарищи-форумчане! Помогите с VB net. Имеется следующая задача:...

Преобразование base64 и обратно - не эквивалентно
подскажите пожалуйста в чем проблема? в Fidler делаю перекодировку текста...

4
vindigo
20 / 20 / 3
Регистрация: 15.05.2014
Сообщений: 80
01.11.2016, 19:57 #2
Попробуйте в 10 строке вместо Base64.DEFAULT использовать Base64.NO_WRAP
0
Johnny13
1 / 1 / 2
Регистрация: 18.10.2011
Сообщений: 50
01.11.2016, 22:50  [ТС] #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...
Судя по всему сервак из-за этого и посылает меня... но почему так происходит?
0
vindigo
20 / 20 / 3
Регистрация: 15.05.2014
Сообщений: 80
03.11.2016, 19:58 #4
да не, то что добавляются бекслеши, это экранирование слешей в строке
а вот посылает он вас, исходя из ошибки, потому что ждет объект, а вы ему строку отдаете...
уже полчаса над вашим вопросом гуглю и не могу понять где собака зарыта

Добавлено через 16 минут
как вообще формируете driver?
и что означает вот это - "{"driver":" + gson.toJson(driver) + "}"? Если формируете строку то где +?
0
petruchodd
126 / 123 / 19
Регистрация: 23.06.2009
Сообщений: 665
07.11.2016, 11:31 #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 . Вообщем ошибка у тебя в том , что напутано где-то с {}
0
07.11.2016, 11:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2016, 11:31
Привет! Вот еще темы с решениями:

Все картинки в Base64, стоит ли?
Стоит ли все картинки, которые на сайте закодировать в Base64? "Эмуляция...

Работа с файловым потоком: Преобразование base64 > original data
Дана функция http://base64.sourceforge.net/b64.c -> static int decode( FILE...

Преобразование картинки
Вопрос на миллион как из такой картинки сделать вот такую картинку код...

Преобразование картинки в код
Всем привет! Возник вопрос. Есть картинка .jpeg, она состоит из пикселов,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru