2014-07-09 33 views
3

目前我正在使用的代碼可以編寫更新的元數據,但會創建一個重複的圖像。這裏是代碼:如何修改iOS中的圖像元數據(EXIF)而不重複?

if([self.textView.text length] != 0 && ![self.userComments isEqualToString: self.textView.text]) 
     { 
      // This code works but creates a duplicate image 
      NSMutableDictionary *userCommentDictionary = [NSMutableDictionary dictionary]; 
      [userCommentDictionary setValue:self.textView.text forKey:(NSString *)kCGImagePropertyExifUserComment]; 

      NSMutableDictionary *dict = [NSMutableDictionary dictionary]; 
      [dict setValue:userCommentDictionary forKey:(NSString *)kCGImagePropertyExifDictionary]; 

      ALAssetsLibrary *al = [[ALAssetsLibrary alloc] init]; 

      [al writeImageToSavedPhotosAlbum:[self.imageView.image CGImage] 
           metadata:dict 
         completionBlock:^(NSURL *assetURL, NSError *error) { 
          if (error == nil) { 
           NSLog(@"Image saved."); 
           self.userComments = self.textView.text; 
          } else { 
           NSLog(@"Error saving image."); 
          } 
         }]; 
     } 

是否有反正避免重複? 感謝您的時間

+2

我不相信這是可能的。 AssetsLibrary根本不允許修改原始資產,所有內容都保存爲新資產並參考原始資產。有了新的PhotoKit庫,但我沒有看到任何允許修改元數據的東西。 – Jack

+1

@JackWu你是對的。請添加爲答案。 –

+0

@JackWu,借調。不要把它放在任何其他人的回答表格中(否則一半的獎金將發給任何接受你的評論並在下面的框中解釋它的人!) –

回答

5

正如在評論中指出的,我不認爲這是可能的。

AssetsLibrary根本不允許修改原始資產,所有內容都保存爲原始資產的新資產。

在iOS 8中使用新的PhotoKit庫時,它們確實允許修改資產,但我沒有看到任何允許您修改元數據的內容。

看一眼ImageIO有方法來修改元數據,但再次,沒有什麼可以將其保存到照片庫。 然而,有了這個,你可能可以用修改過的exif數據替換另一個文件。

編輯闡述: 根據答案here好像ALAssets提供不指向磁盤的URL。我相信這意味着你無法獲得圖像的相關URL來覆蓋它,儘管不在照片庫中。

我建議你把這個文件作爲蘋果的一個增強文件,如果它很重要,如果很多人請求相同的東西,他們可能會在未來添加它!看起來,他們不希望人們搞這個東西雖然..

+0

感謝您的回答。 ImageIO會讓我替換原始圖像嗎?如果能夠得到明確的答案將會很好。 – userx

+0

@AhishekMukherjee我編輯了一下。我會說不,你不可以修改現有照片庫圖像的元數據。 – Jack

+0

我使用PhotoKit可以編輯原始圖像的元數據。以下是Apple Docs中的一些文字「您可以使用照片庫對象執行對照片對象的更改,例如編輯資產元數據或內容,插入新資產或重新排列集合的成員。」 – userx