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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Johnny13
1 / 1 / 1
Регистрация: 18.10.2011
Сообщений: 43
#1

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

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

Преобразование картинки в текст для SQL запроса - Программирование Android
хочу иметь возможность вставлять картинки типа Bitmap в БД на сервере. если на самом сервере прописать запрос INSERT INTO table1(id,...

Преобразование картинки в base64 - Delphi
Подскажите, пожалуйста, можно ли в Делфи 7 преобразовать картинку формата jpg в base64? Уже всё обгулил и заяндексил - ничего. Очень нужна...

картинки base64 - JavaScript
Всем бонжур :) Браузеры кодируют картинки в base64. Каким алгоритмом они это делают ? ( есть ли эти функции( кодируют\раскодируют...

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

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

Все картинки в Base64, стоит ли? - HTML, CSS
Стоит ли все картинки, которые на сайте закодировать в Base64? "Эмуляция data:URL для IE6-7 — с использованием MHTML-включение"...

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

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

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

Преобразование картинки - C#
Вопрос на миллион как из такой картинки сделать вот такую картинку код разный но суть я надеюсь донес подскажи как это сделать

Преобразование картинки в код - C++
Всем привет! Возник вопрос. Есть картинка .jpeg, она состоит из пикселов, каждый пиксел имеет код своего цвета. Как преобразовать...

Преобразование картинки в текст - C#
Вопрос очень странный, и я не уверен, что смогу получить на него ответ. Может кто-то встречал библиотеки, позволяющие преобразовывать...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.11.2016, 11:31
Ответ Создать тему
Опции темы

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