Камера Android2 JPG в Base64 поворачивается на 90 градусов против часовой стрелки - PullRequest
0 голосов
/ 27 июня 2019

Я работаю над способом фотографирования с помощью Camera2 API. Я начал с клонирования репозитория образцов приложений Google.

Пример приложения работает; оно сохраняет изображение и корректно ориентируется при просмотре через файловый браузер на устройстве и при просмотре его на компьютере с Windows.

Однако, когда я пытаюсь заменить код, который сохраняет изображение в файловую систему, кодом, который преобразует изображение в Base64, эта строка (при декодировании) выглядит повернутой на 90 градусов против часовой стрелки. Я видел подобные вопросы, которые утверждают, что само изображение поворачивается, но в данном случае это только представление base64. Вот изменение кода, которое я внес в пример приложения:

@Override
public void onImageAvailable(ImageReader reader) {
    Image image = reader.acquireLatestImage();
    ByteBuffer buffer = image.getPlanes()[0].getBuffer();
    byte[] bytes = new byte[buffer.capacity()];
    buffer.get(bytes);

    byte[] encodedBytes = Base64.encode(bytes,Base64.NO_WRAP);
    String encodedString = new String(encodedBytes);

    Log.wtf(TAG, "Base64 JPG: " + encodedString);
}

Я поместил точку останова в строку журнала, чтобы можно было извлечь все значение закодированной строки. Я использовал несколько онлайн-инструментов, таких как этот , и он почему-то поворачивается на 90 градусов влево.

Это неверный путь к Base64 в формате JPG? Я неправильно анализирую байты?

1 Ответ

1 голос
/ 02 июля 2019

Нет ничего плохого в кодировке.Разные аппаратные средства имеют разную ориентацию сенсора, и они обычно имеют ориентацию 90 градусов для изображений и видео.Поэтому, если вы непосредственно преобразуете кадр в байты, вы получите повернутое изображение.

Камера сохраняет изображение как есть, но добавляет метаданные EXIF ​​об ориентации.Приложение галереи будет читать эти метаданные ориентации и загружать растровое изображение с правильной ориентацией.

...