2015-02-22 11 views
6

Sto cercando di fare l'equivalente di writeImageToSavedPhotosAlbum con il nuovo Photo framework.Quadro foto: salva dati exi dal selettore (apertura, lunghezza focale, velocità dell'otturatore, ...)

Per salvare l'immagine, faccio solo questo:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) { 

    let image = info[UIImagePickerControllerOriginalImage] as UIImage 

    PHPhotoLibrary.sharedPhotoLibrary().performChanges({() -> Void in 
       let changeRequest = PHAssetChangeRequest.creationRequestForAssetFromImage(image) 
      }, completionHandler: { (success, error) -> Void in 
       // 
      }) 
} 

Naturalmente, non c'è nessuna magia e siccome io non faccio nulla di

info[UIImagePickerControllerMediaMetadata] 

, il codice di cui sopra non salva eventuali metadati nel "Rullino foto", come puoi vedere utilizzando lo screenshot di Preview.app quando collego il mio iPhone al mio Mac.

enter image description here

Si ottiene questo punto di vista, aprendo Preview.app, selezionando File> Importa da "voi il nome del dispositivo"; quindi puoi sfogliare le tue foto e vedere quelle quelle scattate con l'app Fotocamera mostrano i dati exif come la lunghezza focale, mentre quelli salvati con il codice sopra mostrano valori vuoti.

Ora la documentazione per creationRequestForAssetFromImage dice:

per impostare le proprietà dei metadati della risorsa appena creata, utilizzare le corrispondenti proprietà della richiesta di modifica (elencati in Modifica Assets).

Quali collegamenti a "+ changeRequestForAsset:" e 4 proprietà (creazioneData, posizione, preferito, nascosto), è un po 'di luce. Che dire delle altre proprietà che si potrebbero desiderare di salvare (come apertura, lunghezza focale, velocità dell'otturatore, ...)?

Come si suppone di salvare i metadati lungo l'immagine con Photo framework?

+1

Hai capire questo fuori? – Steve

+0

Sì Steve, controlla la mia risposta – Nycen

risposta

3

Ecco quello che ho finito per fare:

extension UIImage { 

    /** 
    Gets the metadata from the photo album 

    :param: info The picker dictionary 
    :param: completionHandler A block to call when the metadata is available 
    */ 
    class func requestMetadata(info: [NSObject : AnyObject], completionHandler: ([NSObject : AnyObject]) -> Void) { 
     let assetUrl = info[UIImagePickerControllerReferenceURL] as! NSURL 
     let result = PHAsset.fetchAssetsWithALAssetURLs([assetUrl], options: nil) 
     if let asset = result.firstObject as? PHAsset { 
     let editOptions = PHContentEditingInputRequestOptions() 
     editOptions.networkAccessAllowed = true 

     asset.requestContentEditingInputWithOptions(editOptions, completionHandler: { (contentEditingInput, _) -> Void in 
      let url = contentEditingInput.fullSizeImageURL 
      let orientation = contentEditingInput.fullSizeImageOrientation 
      var inputImage = CoreImage.CIImage(contentsOfURL: url) 
      completionHandler(inputImage.properties()) 
     }) 
    } else { 
     completionHandler([:]) 
    } 
    } 
} 
+1

Bit confuso come funziona con didFinishPickingMediaWithInfo e salvando l'immagine su file, da dove chiami quella funzione? – Steve

+0

didFinishPickingMediaWithInfo restituisce informazioni: [NSObject: AnyObject], chiama semplicemente requestMetadata con quel valore – Nycen

+0

Che dire di salvare l'immagine nel Rullino fotografico insieme ai metadati, come fai a farlo accadere? – mirceapasoi