2015-01-01 1 views
11

Я пытаюсь написать User_Comment и TAG_GPS для захваченного изображения в приложении для Android с использованием интерфейса exif, но по какой-то причине теги, кажется, не добавляются к изображению, когда я просматриваю детали изображения в галерее ,Как написать данные exif для изображения на Android?

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

Кто-нибудь знает, если это проблема с тем, как я пишу теги к изображению?

Это код, который сохраняет данные EXIF ​​следующие @ изменения Чарли ниже:

private File getOutputPhotoFile() throws IOException { 
      File directory = new File(Environment.getExternalStoragePublicDirectory(
         Environment.DIRECTORY_PICTURES), getPackageName()); 
      if (!directory.exists()) { 
      if (!directory.mkdirs()) { 
       Log.e(TAG, "Failed to create storage directory."); 
       return null; 
      } 
      } 


      String timeStamp = new SimpleDateFormat("yyyMMdd_HHmmss", Locale.ENGLISH).format(new Date()); 

      File[] files = directory.listFiles(); 

      File exifVar = new File(directory.getPath(), "IMG_" + timeStamp + ".jpg"); 
      if(files.length!=0) { 
       File newestFile = files[files.length-1]; 
       exifVar = new File(directory.getPath() + File.separator + newestFile.getName()); 
      } 

      String mString = "Generic Text..";  
      ExifInterface exif = new ExifInterface(exifVar.getAbsolutePath()); 
      exif.setAttribute("UserComment", mString); 
      exif.saveAttributes(); 


      exif.setAttribute(ExifInterface.TAG_GPS_LATITUDE, 
      String.valueOf(latituteField.toString())); 

      exif.setAttribute(ExifInterface.TAG_GPS_LONGITUDE, 
      String.valueOf(longitudeField.toString())); 

      exif.saveAttributes(); 

      return exifVar; 




    } 
+0

Почему вы вызываете exif.saveAttributes несколько раз? Я считаю, что каждый раз создается новый образ. Просто интересно – wkhatch

+0

Возможно, я не работал над этим проектом в то время, я думаю, что проблема может заключаться в том, что данные сохраняются в временном изображении под названием «exif» и никогда не записываются в исходное изображение. –

ответ

3

Вы используете exifVar.toString(). Это возвращает только имя файла, а не путь к изображению. Поскольку ваше приложение, вероятно, не находится в папке с картинками, вы должны использовать exifVar.getAbsolutePath().

Если вы не снимаете изображение одновременно с запуском программы, путь будет неправильным. Используйте этот код вместо:

File[] files = directory.listFiles(); 

if(files.length==0) { 
    // No images available 
    return; 
} 

File newestFile = files[files.length-1]; 

File exifVar = new File(directory.getPath() + File.separator + newestFile.getName()); 

Off-Topic:

По вашему огромному списку импорта:

import android.content.*; 

импорта

android.content.Context, 
android.content.DialogInterface and 
android.content.Intent 

Это делает ваш код совсем немного короче , Просто сказать

+0

данные exif по-прежнему не добавляются к деталям изображения после вышеупомянутых изменений, есть ли у вас какие-либо идеи? –

3

Вы должны сначала скопировать файлы, расположенные EXIF ​​здесь google exif в свой проект, то используйте следующий код:

ExifInterface exif = new ExifInterface(); 
exifi.readExif(exifVar.getAbsolutePath()); 
exif.setTagValue(ExifInterface.TAG_USER_COMMENT, mString); 
exif.forceRewriteExif(exifVar.getAbsolutePath())); 

ExifInterface здесь используется новый, который вы только что добавили.

+0

Было бы лучше, если бы вы указали тип данных и инициализацию переменной "exifi" – Deva

 Смежные вопросы

  • Нет связанных вопросов^_^