2015-11-19 36 views
5

Tôi đang cố gắng thêm siêu dữ liệu vào tổng hợp được tạo và lưu siêu dữ liệu vào thư viện ảnh bằng cách sử dụng khung Ảnh. Tôi đã lưu và chỉnh sửa làm việc nhưng tôi chỉ có thể tìm ra cách để thêm siêu dữ liệu. Tôi đã thử nhiều cách tiếp cận như thêm siêu dữ liệu bằng cách tạo hình ảnh CoreGraphics (xem mã bên dưới). Tất cả các phương pháp này không cho tôi lỗi nhưng tôi không thể thấy siêu dữ liệu khi tôi mở hình ảnh trên máy Mac của mình.Lưu siêu dữ liệu cho hình ảnh tùy chỉnh bằng Swift (iOS) và Khung ảnh

Có ai có thể chỉ cho tôi đúng hướng ở đây không?

PHPhotoLibrary.sharedPhotoLibrary().performChanges({ 
let assets : PHFetchResult = PHAsset.fetchAssetsWithLocalIdentifiers([self.localIdentifier], options: nil); 
let asset : PHAsset = assets[0] as! PHAsset; 
let changeRequest = PHAssetChangeRequest(forAsset: asset); 
changeRequest.location = self.currentLocation; 

asset.requestContentEditingInputWithOptions(nil, completionHandler: { (input: PHContentEditingInput?, 
    info: [NSObject : AnyObject]) -> Void in 


    guard let input = input else { return } 

    let imageManager : PHImageManager = PHImageManager(); 
    let requestoptions : PHImageRequestOptions = PHImageRequestOptions(); 
    requestoptions.resizeMode = PHImageRequestOptionsResizeMode.None; 

    imageManager.requestImageForAsset(asset, targetSize: PHImageManagerMaximumSize, contentMode: PHImageContentMode.Default, options: PHImageRequestOptions(), resultHandler: { (let image : UIImage?, _) -> Void in 

     let output : PHContentEditingOutput = PHContentEditingOutput(contentEditingInput: input); 

     PHPhotoLibrary.sharedPhotoLibrary().performChanges({() -> Void in 

      let changeRequest = PHAssetChangeRequest(forAsset: asset); 

      /* Neu */ 
      let imageData : NSData = NSData(contentsOfURL: (input.fullSizeImageURL)!)!; 
      let image : CIImage = CIImage(data: imageData)!; 
      let dataPtr = CFDataCreate(kCFAllocatorDefault, UnsafePointer<UInt8>(imageData.bytes), imageData.length) 


      // Save off the properties 
      let imageSource : CGImageSourceRef = CGImageSourceCreateWithData(dataPtr, nil)!; 
      var metadata : NSMutableDictionary = NSMutableDictionary(dictionary: CGImageSourceCopyProperties(imageSource, nil)!); 



/* Add some values to metadata */ 
.... 

      NSLog("New metadata: %@", metadata); 

      // Save the image 
      let outputImageSource : CGImageSourceRef = CGImageSourceCreateWithData(dataPtr, nil)!; 
      let jpegData : CFMutableDataRef = CFDataCreateMutable(kCFAllocatorDefault, 0); 
      let outputDestination : CGImageDestinationRef = CGImageDestinationCreateWithData(jpegData, CGImageSourceGetType(outputImageSource)!, 1, nil)!; 

      // add the image data to the destination 
      CGImageDestinationAddImageFromSource(outputDestination, outputImageSource, 0, metadata); 

      if CGImageDestinationFinalize(outputDestination) 
      { 
       NSLog("Successful image creation."); 
       // process the image rendering, adjustment data creation and finalize the asset edit. 
      } 
      else 
      { 
       NSLog("Image creation failed."); 
      } 



      (jpegData as NSData).writeToURL(output.renderedContentURL, atomically: true); 


      let options : String = NSString(format: "%f|%f|%f|%f|%f|%f", self.saturationSlider.value, self.warmthSlider.value, self.brightnessSlider.value, self.sharpnessSlider.value, self.contrastSlider.value, self.gammaSlider.value) as String; 
      let nsObject: AnyObject? = NSBundle.mainBundle().infoDictionary!["CFBundleShortVersionString"]; 

      output.adjustmentData = PHAdjustmentData(formatIdentifier: NSBundle.mainBundle().bundleIdentifier!, 
       formatVersion: nsObject as! String, 
       data: options.dataUsingEncoding(NSUTF8StringEncoding)!); 

      changeRequest.contentEditingOutput = output; 

      }, completionHandler: { (_bool, _error) -> Void in 
       if !_bool && error != nil 
       { 
        NSLog("%@", error!); 
       } 
     }); 
    }); 
}); 
}, completionHandler: { (_bool, _error) -> Void in 
}); 
+0

Hơn một năm sau, nhưng tôi đang tìm kết quả tương tự. Không có lỗi, nhưng cũng không có siêu dữ liệu tùy chỉnh. Mặc dù khung Ảnh quảng cáo "chỉnh sửa siêu dữ liệu" cho nội dung, nhưng rõ ràng không cung cấp chỉnh sửa siêu dữ liệu loại EXIF ​​thực tế. – snakeoil

+0

Tôi đã gặp phải sự cố tương tự. Tôi đã đăng phiên bản của riêng mình về câu hỏi này https://stackoverflow.com/questions/48255636/editing-photo-metadata-and-phadjustmentdata. Nó xuất hiện chỉnh sửa các thuộc tính exif hoạt động nếu hình ảnh đã có một PHAdjustmentData được đính kèm từ một ứng dụng khác. Cuối cùng tôi đã từ bỏ và thêm một id vào thuộc tính nhận xét exif về tạo ảnh và sử dụng nó để lập chỉ mục một từ điển lưu trữ siêu dữ liệu bổ sung mà tôi đã lưu trữ trong Dữ liệu cốt lõi. – Spads

Trả lời

-2

Bạn có thể thêm/đặt một số thuộc tính trên đối tượng creationRequest. Tôi không biết về việc thêm siêu dữ liệu tùy chỉnh.

PHPhotoLibrary.shared().performChanges({ 

    let creationRequest = PHAssetChangeRequest.creationRequestForAsset(from: self.anImage!) 

    let aLocation = CLLocation(latitude: 27.63866, longitude: -80.39707) 

    creationRequest.location = aLocation 

    creationRequest.isFavorite = true 

    creationRequest.creationDate = Date() 

}, completionHandler: {success, error in 
    if !success { 
     print("error creating asset: \(error!)") 
    } else { 
     print("success creating asset!") 
    } 
}) 
Các vấn đề liên quan