Как преобразовать большое растровое изображение (фотографию, сделанную камерой телефона) в строку Base64?
android
bitmap
base64
android-bitmap
Панкадж Сингх
источник
источник
Ответы:
используйте следующий метод для преобразования растрового изображения в байтовый массив:
для кодирования base64 из байтового массива используйте следующий метод
источник
У меня есть быстрое решение. Просто создайте файл
ImageUtil.java
Использование:
или
источник
Проблема с ответом jeet заключается в том, что вы загружаете все байты изображения в массив байтов, что, вероятно, приведет к сбою приложения на устройствах низкого уровня. Вместо этого я бы сначала записал изображение в файл и прочитал его с помощью класса Apache Base64InputStream . Затем вы можете создать строку Base64 непосредственно из InputStream этого файла. Это будет выглядеть так:
Как видите, указанное выше решение работает напрямую с потоками, избегая необходимости загружать все байты в переменную, что значительно снижает объем памяти и снижает вероятность сбоя на устройствах низкого уровня. По-прежнему существует проблема, заключающаяся в том, что помещение самой строки Base64 в переменную String не является хорошей идеей, поскольку, опять же, это может вызвать ошибки OutOfMemory. Но, по крайней мере, мы вдвое сократили потребление памяти, исключив массив байтов.
Если вы хотите пропустить этап записи в файл, вам нужно преобразовать OutputStream в InputStream, что не так просто сделать (вы должны использовать PipedInputStream, но это немного сложнее, поскольку два потока всегда должны быть в разных темах).
источник
Попробуйте это, сначала масштабируйте изображение до необходимой ширины и высоты, просто передайте исходное растровое изображение, требуемую ширину и требуемую высоту в следующий метод и получите взамен масштабированное растровое изображение:
Например: Bitmap scaledBitmap = getScaledBitmap (originalBitmap, 250, 350);
Теперь просто передайте масштабированное растровое изображение в следующий метод и получите взамен строку base64:
Например: String base64String = getBase64String (scaledBitmap);
Чтобы декодировать строку base64 обратно в растровое изображение:
источник
Все эти ответы неэффективны, поскольку они без необходимости декодируют растровое изображение, а затем повторно сжимают растровое изображение. Когда вы делаете фотографию на Android, она сохраняется в формате jpeg во временном файле, который вы указываете при соблюдении документации Android .
Что вам нужно сделать, так это напрямую преобразовать этот файл в строку Base64. Вот как это сделать с помощью простого копирования и вставки (в Kotlin). Обратите внимание, что вы должны закрыть base64FilterStream, чтобы действительно очистить его внутренний буфер.
В качестве бонуса качество вашего изображения должно быть немного улучшено за счет обхода повторного сжатия.
источник
Теперь, когда большинство людей используют Kotlin вместо Java, вот код на Kotlin для преобразования растрового изображения в строку base64.
источник
Используйте этот код ..
источник