Сохранение изображения png в базе данных через приложение для Android

Я хочу сохранить изображение с помощью моего разработанного приложения на мобильном телефоне, как лучше всего это сделать.

Я пытался сохранить через sqlite, но есть ли другие варианты?

Неправильно сохранять изображение в базе данных. Скорее, вы должны сохранить путь к изображению

RaffaD 03.04.2019 21:49

У вас есть примеры того, нужно ли нам шифровать изображения?

TechDubey 03.04.2019 22:15

см. этот stackoverflow.com/q/9357668/6017001

S.R 03.04.2019 22:29

Шифровать или сжимать? @tTechDubey

RaffaD 05.04.2019 08:00

Когда мы сохраняем изображения в путь, мы должны сжать изображение или мы можем сохранить без сжатия.

TechDubey 07.04.2019 20:23
1
5
1 035
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Рекомендуемый способ — сохранить изображение в виде файла вне базы данных, а затем сохранить путь или часть пути, достаточную для уникальной идентификации изображения в базе данных.

Чтобы сохранить изображение, вы должны сохранить его как BLOB на основе байта [] (массива байтов); Однако при использовании Android SDK существует ограничение, заключающееся в том, что можно получить только изображения размером менее 2 МБ, даже если их можно сохранить.

  • Технически вы можете сохранить изображение в виде шестнадцатеричной, двоичной или восьмеричной строки, но это будет более сложно, менее эффективно и даже более ограничивающе.. Так что на самом деле вы должны хранить его как BLOB не совсем соответствует действительности.

Также на самом деле довольно бесполезно хранить изображения (или любые большие файлы) с помощью SQLite или большинства структурированных баз данных, поскольку вы мало что можете сделать с запросом данных.

На самом деле вы сохраняете BLOB через SQL, используя что-то вроде: -

INSERT INTO your_table VALUES(x'00FF01EF');
  • т. е. 00 (0) — первый байт, FF (255) — 2-й, 01 (01) — 3-й........
  • обратите внимание, что приведенное выше будет работать только для таблицы с одним столбцом

Однако удобный метод SQLiteDatabase вставлять выполняет преобразование из byte[] в правильный SQL (шестнадцатеричная строка) от вашего имени.

Итак, вы обычно используете: -

ContentValues cv = new ContentValues();
cv.put("your_column",your_image_as_a_byte_array);
your_sqlitedatabase_object.insert("your_table",null,cv);

Вы извлекаете массив байтов из курсора (результат запроса), используя что-то вроде строк

your_retrieved_image_byte_array = your_cursor.getBlob(your_column_offset_as_an_int); //<<<<<<<<< CursorWindow full error if the row cannot fit into the CursorWindow which has 2MB limit

Вы можете взглянуть на Как я могу вставить изображение в базу данных sqlite, так как он более подробный и имеет код, который хранит как изображения, так и пути (любой из них сохраняется в зависимости от размера изображения, менее 100 КБ, затем сохраняется изображение, иначе путь хранится) и дополнительно извлекает изображения в ListView. Кроме того, хотя это и не рекомендуется, это способ обойти ограничение в 2 МБ Как использовать изображения в Android SQLite, превышающие ограничения CursorWindow?.

Другие вопросы по теме