2017-01-11 33 views
2

を保存していないことは以下の私のコード - exifInterface.saveAttributesでアンドロイドExifInterface属性

 try { 
      InputStream inputStream = getAssets().open("thumbnail.jpg"); 
      exifInterface = new ExifInterface(inputStream); 
      exifInterface.setAttribute(ExifInterface.TAG_ARTIST,"TEST INPUT"); 
      exifInterface.saveAttributes(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

()私は次のエラーを取得するラインである -

にjava.io.IOException:ExifInterface属性を保存することはできません。現在の入力に対して

エラーが画像ファイルによるものなのか、保存しようとしている属性によるものなのか分かりません。また、私は可能な解決策(例えばSanselan)をオンラインで見ていましたが、それが解決するかどうかはわかりません。

誰かがこれを修正する方法を説明できますか?

ありがとう!

+0

私はDocumentFileで画像を保存し、DocumentFile.getUri()を使用して画像を保存しますが、InputStreamを使用してEXIFデータを画像に保存しようとすると、同じメッセージで同じ例外が発生します。私は、デバイスメモリとSDカードに保存しようとしましたが、両方とも例外が発生します。 ExifInterface(InputStream)が盗難された可能性がありますか? – Thracian

答えて

0

私が問題と考えるのは、アプリのジップが作成されている間にアプリ内に配置されたアセットのみを読み込む属性を追加しようとしていることです。

zip内のファイルに属性を追加することは、exifInterfaceではまだサポートされていません。 SDCardの外に存在する他のファイルに簡単に属性を追加することは可能です。

1
ExifInterface does not support saving attributes for the current input. 

現在の入力はInputStreamです。 InputStreamにデータを保存することはできません。 OutputStreamにのみ。

第2の問題は、assetsのファイルが読み取り専用であることです。したがって、あなたがそれを試したならば、OutputStreamを開くことさえできませんでした。そう不可能。

0

入力ストリームを使用して属性の突然変異を行うことはできません。

あなたはExifInterfaceのコードを確認することができ、それはと言う:あなたは、ファイルのメタデータに書きたい場合

ので
/** 
    * Reads Exif tags from the specified image input stream. Attribute mutation is not supported 
    * for input streams. The given input stream will proceed its current position. Developers 
    * should close the input stream after use. This constructor is not intended to be used with 
    * an input stream that performs any networking operations. 
    */ 
    public ExifInterface(InputStream inputStream) throws IOException { 
    /* Irrelevant code here */ 

、あなたは、コンストラクタでファイルを渡す必要があります。それ以外の場合は失敗します。あなたはまた、常にクラスで(入力ストリームで)失敗したコードを見ることができます:

public void saveAttributes() throws IOException { 
     if (!mIsSupportedFile || mMimeType != IMAGE_TYPE_JPEG) { 
      throw new IOException("ExifInterface only supports saving attributes on JPEG formats."); 
     } 
     if (mFilename == null) { 
      throw new IOException(
        "ExifInterface does not support saving attributes for the current input."); 
     } 

//Irrelevant code 

のでExifInterface(ファイル)を使用し、あなたのコードを動作させることができるでしょう。

ハッピーコーディング!

関連する問題