2012-01-07 56 views
9

我有一個ipad應用程序,它使用ALAssetsLibrary從Photos應用程序中獲取圖像,然後將其上傳到Web服務器。到目前爲止一切工作正常。使用ALAssetsLibrary訪問裁剪或編輯的圖像

現在,如果我去照片應用程序和編輯圖像(說裁剪)和上傳,原始未裁剪是上傳。我正在使用資源網址訪問/保存照片。

例:

createPhoto: 
assetUrl: assets-library://asset/asset.JPG?id=542F09CA-00E1-412E-A7E6-0C222E3F8FFB&ext=JPG, 
UTIs: (
    "public.jpeg" 
), 
UTI:public.jpeg 

這不是一個ALAssetsLibrary緩存問題監守,我試圖編輯,殺應用程序,啓動,上傳仍然上傳舊形象。

問:

  1. 我怎麼知道,如果一個編輯(裁剪/紅眼/增強型)照片的版本可用?
  2. 如何訪問照片的編輯版本?

回答

4

我認識到相同的行爲,並在前一段時間做了一些測試。讓我與您分享我的結果:

  1. 您只能通過fullScreenImage方法獲得編輯後的圖像。 這也在Apple的文檔中提到: 「在iOS 5和更高版本中,此方法返回完全裁剪,旋轉和調整的圖像 - 完全如用戶在照片或圖像選取器中看到的那樣。」

  2. fullResolutionImage和getBytes方法返回未編輯的圖像。但是,剪輯等剪輯參數保存在圖像元數據中。但是,此元數據信息僅由Apple應用程序(如Aperture和iPhoto)解釋。

  3. 通過檢查他的圖像元數據可以發現,如果圖像已被編輯。比較未經編輯和編輯的圖像的元數據並查找元數據字段的差異。

+0

我印刷CGImageRef ' fullResolutionImage的寬度和高度:3968 X 2232 fullScreenImage:841×1024 ' 不幸的是,fullScreenImage比全屏圖像小得多。我需要全尺寸的編輯圖像上傳。有沒有其他方法可以訪問編輯後的全分辨率圖像。 – mithuntnt 2012-01-08 14:31:21

+2

不幸的是,第三方應用程序沒有API。 – holtmann 2012-01-11 06:50:09

1
-(UIImage*)fullScreenImage:(ALAsset *)imageAsset{ 
    ALAssetRepresentation *assetRepresentation = [imageAsset defaultRepresentation]; 
    CGImageRef fullResImage = [assetRepresentation fullResolutionImage]; 
    NSString *adjustment = [[assetRepresentation metadata] objectForKey:@"AdjustmentXMP"]; 
    if (adjustment) { 
     NSData *xmpData = [adjustment dataUsingEncoding:NSUTF8StringEncoding]; 
     CIImage *image = [CIImage imageWithCGImage:fullResImage]; 

     NSError *error = nil; 
     NSArray *filterArray = [CIFilter filterArrayFromSerializedXMP:xmpData 
                inputImageExtent:image.extent 
                   error:&error]; 
     CIContext *context = [CIContext contextWithOptions:nil]; 
     if (filterArray && !error) { 
      for (CIFilter *filter in filterArray) { 
       [filter setValue:image forKey:kCIInputImageKey]; 
       image = [filter outputImage]; 
      } 
      fullResImage = [context createCGImage:image fromRect:[image extent]]; 
     } 
    } 
    UIImage *result = [UIImage imageWithCGImage:fullResImage 
              scale:[assetRepresentation scale] 
            orientation:(UIImageOrientation)[assetRepresentation orientation]]; 
    return result; 
} 

在上面的函數傳遞ALAsset值,那麼你編輯的圖像... :)

以上代碼從元數據

如果你要去讓編輯圖像與全屏圖像,那麼你也將得到編輯圖像

ALAssetRepresentation *representation = [asset defaultRepresentation]; 
CGImageRef iref = [representation fullScreenImage]; 
UIImage *editedImage = [UIImage imageWithCGImage:iref];