2012-01-07 9 views
9

Mam iPada, który trwa obrazy ze zdjęć za pomocą aplikacji ALAssetsLibrary a następnie przesłane do ich serwera WWW. Jak dotąd wszystko działa dobrze.Dostęp przycięte lub edytować obrazy za pomocą ALAssetsLibrary

Teraz jeśli pójdę do wniosku fotografie i edycji obrazu (powiedzmy upraw) i przesłać oryginał un-przycięte jest uzyskiwanie przesłany. Uzyskuję dostęp/zapisuję zdjęcie przy użyciu adresu URL zasobu.

Ex:

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

To nie jest kwestia ALAssetsLibrary cache becuase próbowałem edycji, zabić aplikację, start, przesyłanie, które wciąż przesłane stare zdjęcie.

Pytanie:

  1. Skąd mam wiedzieć, czy edytowany (przycięty/czerwonych oczu/rozszerzony) wersja zdjęcie jest dostępne?
  2. Jak uzyskać dostęp do edytowanej wersji zdjęcia?

Odpowiedz

4

Poznałem ten sam problem i zrobił kilka testów jakiś czas temu. Pozwól, że podzielę się z tobą moimi wynikami:

  1. Edytowany obraz przechodzisz tylko przez metodę fullScreenImage. Jest to również wspomniane w dokumentacji Apple: "W iOS 5 i nowszych ta metoda zwraca całkowicie przycięty, obrócony i dopasowany obraz - dokładnie tak, jak zobaczyłby to użytkownik w Zdjęciach lub w selektorze zdjęć."

  2. Sposób fullResolutionImage i getBytes powrotu nieedytowane. Jednak parametry edycji, takie jak przycinanie, są zapisywane w metadanych obrazu. Te informacje o metadanych są jednak interpretowane tylko przez aplikacje Apple, takie jak Aperture i iPhoto.

  3. można dowiedzieć się, czy obraz został edytowany, sprawdzając he metadane obrazu. Porównaj metadane obrazu nieedytowanego i edytowanego i poszukaj różnic w polach metadanych.

+0

wydrukowałem szerokość i wysokość CGImageRef ' fullResolutionImage: 3968 X 2232 fullScreenImage: 841 X 1024 ' Niestety fullScreenImage jest znacznie mniejsza niż pełnoekranowego obrazu. Do przesłania potrzebuję pełnowymiarowego edytowanego obrazu. Czy istnieje alternatywny sposób uzyskiwania dostępu do edytowanego obrazu w pełnej rozdzielczości. – mithuntnt

+2

Niestety nie ma interfejsu API aplikacji innych firm. – holtmann

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; 
} 

W powyższej funkcji przekazać wartość ALAsset wtedy edytowany obraz ... :)

powyższy kod na uzyskanie edytowanego obrazu z metadanych

Jeśli u go z pełnoekranowego obrazu wtedy też będzie u dostać edytowanego obrazu

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