Исходное изображение не обнаружено ExifInterface

#android

#Android

Вопрос:

Я сохраняю изображение с пользовательской камеры:

 public String getFilename() {
        File file = new File(Environment.getExternalStorageDirectory().getPath(), "Products/Images");
        if (!file.exists()) {
            file.mkdirs();
        }
        String uriSting = (file.getAbsolutePath()   "/"   System.currentTimeMillis()   ".jpg");
        return uriSting;

    }
  

Теперь:

 public String saveImage(Bitmap bitmap) {
        FileOutputStream out = null;
        String filename = getFilename();

        try {
            out = new FileOutputStream(filename);

            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);

        } catch (FileNotFoundException e) {
            Log.e("Error",e.toString());
            e.printStackTrace();
            return "";
        }
        return  filename;

    }
  

Я использую это имя файла в ExifInterface после сохранения изображения

 exif = new ExifInterface(filePath);
  

Но каждый раз, когда это отображается в моем журнале Raw image not detected , Exif: 0

Комментарии:

1. file.mkdirs(); Адаптируйте свой код. Проверьте возвращаемое значение mkdirs и остановите, если false . Возвращает значение null. Остановитесь и отобразите всплывающее окно для информирования пользователя.

Ответ №1:

Вы сжимаете растровое изображение в файл jpg.

Растровые изображения не содержат информации exif.

И сжатие растрового изображения в файл jpg не добавляет заголовок exif в файл.

Комментарии:

1. можете ли вы сказать мне другой способ получения изображения, потому что я использую это при захвате BitmapFactory.decodeByteArray(data, 0, data.length); , это даст растровое изображение, как я могу получить что-то, что содержит информацию exif

2. FileOutputStream, похоже, тогда выбор

3. ???? Вы создали свое растровое изображение из «данных». Итак, что именно было в данных?

4. Я приму ваш ответ, как только мой запрос будет разрешен большое спасибо!

5. Вы приняли неправильный ответ. Хорошо.. не то, чтобы это было неправильно…

Ответ №2:

BitmapFactory.decodeByteArray(данные, 0, данные.длина);

У вас есть хороший массив байтов, называемый data.

Этот массив байтов содержит байты файла jpg с заголовком exif.

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

Вместо этого сохраните байты в вашем массиве данных непосредственно в файл.

Тогда у вас будет файл jpg с заголовком exif.